如何在sailsjs waterline中使用数组属性更新模型

时间:2015-07-08 02:13:27

标签: sails.js waterline

我将这个模型与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.]

1 个答案:

答案 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);
            });
    });
}