我将这个模型与friends属性作为一种数组。
var bcrypt = require('bcrypt');
module.exports = {
attributes: {
id : {
type: 'integer',
autoIncrement: true
},
username : {
type : 'string',
required : true,
unique : true
},
email : 'string',
firstname : 'string',
lastname : 'string',
password : 'string',
friends : 'array'
},
beforeCreate: function(values, next) {
bcrypt.hash(values.password, 10, function(err, hash) {
if (err) {
return next(err);
}
values.password = hash;
next();
});
}
};
这是我的路线方法。
addFriend : function (req, res) {
User.findOne({username : req.session.user.username}).exec(function (err, user) {
if(!user.friends)user.friends = [];
user.friends.push(req.param('friend'));
user.save(function (err) {
console.log(err);
});
});
}
我已经使用User.update(标准,数据)来更新模型,但我甚至无法使用.save()来更新模型,即使这样做......
addFriend : function (req, res) {
User.findOne({username : req.session.user.username}).exec(function (err, user) {
user.firstname = 'Nate';
user.save(function (err) {
console.log(err);
});
});
}
有没有其他方法可以在不执行Model.update的情况下进行保存,或者如何使用该方法推送到数组。我到处寻找为什么我无法解决这个问题,并且我已经在节点中使用了很多orm以及所有的水线文档显示在查找后使用模型上的保存。 / p>
这是我在保存方法
上遇到的错误[Error: Error updating a record.]
答案 0 :(得分:3)
您可以将.findOne
和.update
合并。
addFriend : function (req, res) {
User.findOne({username : req.session.user.username}).exec(function (err, user) {
var friends = user.friends ? user.friends : [];
friends.push(req.param('friend'));
User.update({username: req.session.user.username}, {friends: newFriends})
.exec(function(err, updatedUser) {
return res.json(updatedUser);
});
});
}