keystonejs/keystone-classic

TypeError: item.set is not a function

Open

#4,538 opened on Dec 30, 2017

View on GitHub
 (1 comment) (0 reactions) (0 assignees)JavaScript (2,288 forks)batch import
bughelp wanted

Repository metrics

Stars
 (14,656 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

Expected behavior

Setting a name field via User.updateItem should update the field and return no errors.

Actual/Current behavior

Field is not updated, and error is returned:

TypeError: item.set is not a function
    at name.updateItem (/Users/davidm/development/js/tic-manager/node_modules/keystone/fields/types/name/NameType.js:208:9)
    at doFieldUpdate (/Users/davidm/development/js/tic-manager/node_modules/keystone/lib/list/updateItem.js:149:20)
    at /Users/davidm/development/js/tic-manager/node_modules/async/dist/async.js:3025:16
    at eachOfArrayLike (/Users/davidm/development/js/tic-manager/node_modules/async/dist/async.js:941:9)
    at eachOf (/Users/davidm/development/js/tic-manager/node_modules/async/dist/async.js:991:5)
    at Object.eachLimit (/Users/davidm/development/js/tic-manager/node_modules/async/dist/async.js:3089:3)
    at /Users/davidm/development/js/tic-manager/node_modules/keystone/lib/list/updateItem.js:176:10
    at /Users/davidm/development/js/tic-manager/node_modules/async/dist/async.js:3686:9
    at replenish (/Users/davidm/development/js/tic-manager/node_modules/async/dist/async.js:882:17)
    at iterateeCallback (/Users/davidm/development/js/tic-manager/node_modules/async/dist/async.js:867:17)
    at /Users/davidm/development/js/tic-manager/node_modules/async/dist/async.js:840:16
    at /Users/davidm/development/js/tic-manager/node_modules/async/dist/async.js:3691:13
    at apply (/Users/davidm/development/js/tic-manager/node_modules/async/dist/async.js:21:25)
    at /Users/davidm/development/js/tic-manager/node_modules/async/dist/async.js:56:12
    at /Users/davidm/development/js/tic-manager/node_modules/keystone/lib/list/updateItem.js:171:5
    at /Users/davidm/development/js/tic-manager/node_modules/async/dist/async.js:356:16

Steps to reproduce the actual/current behavior

This is on a super simple 'update profile' style form. I'm learning by screwing around at the moment, so may be user error rather than an actual bug. :)

profile.js:

var keystone = require('keystone');
var User = keystone.list('User');

exports = module.exports = function (req, res) {

    var view = new keystone.View(req, res);
    var locals = res.locals;
    
    // Set locals
	locals.section = 'profile';
	locals.formData = req.body || {};
	locals.validationErrors = {};
    locals.profileUpdated = false;

    view.query('currentUser', User.model.findById(req.user._id));

	view.on('post', { action: 'updateProfile' }, function (next) {
        var userObj = User.model.findById(req.user._id);

        User.updateItem(userObj, req.body, {
            fields: 'name, email',
            user: userObj,
        }, function (err) {
            if (err) {
                console.log(err);
                console.log(req.body);
            } else {
                locals.profileUpdated = true;
            }
            next();
        });
    });
    
    view.render('profile');
  };

profile.pug:

extends ../layouts/default

block intro
	.container
		h1 #{user.username} - Profile
		
block content
	.container
		if profileUpdated
			h3 Your profile has been updated.
		else
			.row: .col-sm-8.col-md-6
				form(method='post')
					input(type='hidden', name='action', value='updateProfile')
					.form-group(class=validationErrors.name ? 'has-error' : null)
						label First Name
						input(type='text', name='name.first', value=user.name.first||'').form-control
					.form-group(class=validationErrors.name ? 'has-error' : null)
						label Last Name
						input(type='text', name='name.last', value=user.name.last||'').form-control
					.form-group(class=validationErrors.email ? 'has-error' : null)
						label Email
						input(type='email', name='email', value=user.email).form-control
					.form-actions
						button(type='submit').btn.btn-primary Send

Environment

Software Version
Keystone 4.0.0-beta.5
Node v8.4.0
OS macOS Sierra
mongoDB v3.6.1

Contributor guide