Keystonejs :更新用户配置文件时出错;姓名,电子邮件,通行证等



我是Keystone js的新手。现在我正在制作一个具有用户仪表板的 Web 应用程序。我正在尝试对用户项目使用 updateItem 的方法,该用户项目已在函数的第一个参数中被索引/搜索/查询。

// KEYSTONE METHOD
User.updateItem({_id: req.params.id}, req.body, {
fields: 'user',
flashErrors: true,
logErrors: true},
function(err) {
if (err) {
console.log("An error happened!");
console.log(err);
} else {
return res.redirect('/dashboard/' + req.params.id);
}
next();
});

控制台中弹出错误,显示:

{
error: 'invalid configuration',
detail: 'Invalid path specified in fields to update [user] for list User'
}

似乎没有找到用户模型。我想安慰.log如果系统通过回调参数找到了用户模型,但这种方法没有。

正如我所说,我对 keystonejs 真的很陌生,我什至没有完全理解这里的事情是如何工作的。 但是,我觉得它真的很接近工作...

**代码参考:仪表板视图 **

var keystone = require('keystone');
var user     = keystone.list("User");
var User     = keystone.List("User");
exports = module.exports = function (req, res) {
var view = new keystone.View(req, res);
var locals = res.locals;
// Init locals
locals.currentUser = req.body || {};
view.query('currentUser', user.model.findById(req.params.id));
view.on('post', { action: 'user.update' }, function(next) {
// KEYSTONE METHOD
User.updateItem({_id: req.params.id}, req.body, {
fields: 'user',
flashErrors: true,
logErrors: true},
function(err) {
if (err) {
console.log("An error happened!");
console.log(err);
} else {
return res.redirect('/dashboard/' + req.params.id);
}
next();
});
});
// Render the view
view.render('../dashboard/dashboard-main');

};

** 代码编号 : 翡翠代码 **

form(method="post")
input(type='hidden', name='action',  value='user.update')
.row.mb-4
.col-md-4
label First Name
input.form-control(type="text" name="first" value=currentUser.name.first)
.col-md-4
label Last Name
input.form-control(type="text" name="last" value=currentUser.name.last)
.row.mb-10
.col-md-12
button.btn.btn-primary(type="submit")
i.fa.fa-fw.fa-lg.fa-check-circle
|  Save

下面是用户模型:

var keystone = require('keystone');
var Types = keystone.Field.Types;
/**
* User Model
* ==========
*/
var User = new keystone.List('User');
User.add({
name: { type: Types.Name, required: true, index: true },
email: { type: Types.Email, initial: true, required: true, unique: true, index: true },
password: { type: Types.Password, initial: true, required: true },
}, 'Permissions', {
isAdmin: { type: Boolean, label: 'Can access Keystone', index: true },
});
// Provide access to Keystone
User.schema.virtual('canAccessKeystone').get(function () {
return this.isAdmin;
});

/**
* Relationships
*/
User.relationship({ ref: 'Post', path: 'posts', refPath: 'author' });

/**
* Registration
*/
User.defaultColumns = 'name, email, isAdmin';
User.register();

注意:我为此应用程序使用了 yeoman 生成器,并且刚刚为用户仪表板添加了新的路由文件和 jade 视图文件。

var User = keystone.List("User");

在您的视图/路线中无效.js。您仅使用大写的 .在模型中创建新列表时的列表,因为它是类启动,就像在模型中一样。

因此,仪表板视图的正确上下文可能是:

var keystone = require('keystone');
var user     = keystone.list("User");
/* var User     = keystone.List("User"); */
exports = module.exports = function (req, res) {
var view = new keystone.View(req, res);
var locals = res.locals;
// Init locals
locals.currentUser = req.body || {};
view.query('currentUser', user.model.findById(req.params.id));
view.on('post', { action: 'user.update' }, function(next) {
// KEYSTONE 
/* User.updateItem({_id: req.params.id}, req.body, { */
user.updateItem({_id: req.params.id}, req.body, {
fields: 'user',
flashErrors: true,
logErrors: true},
function(err) {
if (err) {
console.log("An error happened!");
console.log(err);
} else {
return res.redirect('/dashboard/' + req.params.id);
}
next();
});
});
// Render the view
view.render('../dashboard/dashboard-main');

相关内容

最新更新