2015-03-31 48 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

相關問題