2015-03-31 49 views
3

我试图使用2个模型之间的多对多关联,我必须调用.add()或.remove ()两次使其正常工作:Sails.js/Waterline .add()和.remove()只适用于第二次调用

// User.js Model 
module.exports = { 
    attributes: { 
    connections: { 
     collection: 'connection', 
     via: 'users' 
    } 
    } 
} 

// Connection.js Model 
module.exports = { 
    attributes: { 
    users: { 
     collection: 'user', 
     via: 'connections' 
    } 
    } 
} 

这是我在我的UsersController.js代码:

User.findById(req.params.user) 
    .populate('connections') 
    .exec(function(err, users) { 
     if (err) return res.status(404).end(); // Not really a 404 but good for now 

     var user = users[0]; 
     user.connections.add(req.body.connection_id); 
     user.save(function(err) { 
     // In my tests err is null/undefined 
     return res.status(204).end(); 
     } 
    }); 

,我收到了204回来的日志或没有在任何其他错误失败。当我检查我的MongoDB数据库时,用户的连接字段只是一个空数组。如果我再次发送相同的请求,那么我得到一个错误,说明该用户的connection_id已经存在。我查看数据库,现在连接出现在用户的连接字段中。当我删除一个连接时,它做同样的事情,我必须发送两次才能生效。有人有主意吗?

下面是我使用的模块版本:

  • Node.js的版本:0.12.0
  • Sails.js版本:0.11.0
  • 帆 - 蒙戈版本:0.10.5

回答

2

听起来像一些与同步和异步方法有关的东西......这意味着您在某个请求完成之前正在退出该方法。但不知道发生了什么。看看是否有帮助:

var connectionId = req.param('connection_id'); 
var userId = req.param('user'); 

User.find(userId) 
.populate('connections') 
.exec(function(err, users) { 
    if (err) return res.status(404).end(); // Not really a 404 but good for now 

//BTW might be good to double check doing console.log("users: "+JSON.stringify(users)); 

    var user = users[0]; 
    user.connections.push(connectionId); 

//Is it really there? console.log("user: "+JSON.stringify(user)); 

    user.save(function(err) { 
    // In my tests err is null/undefined 
    return res.status(204).end(); 
    } 
}); 
+0

谢谢!那为我工作Stenio。 – janex 2015-04-09 02:52:49

相关问题