2015-02-23 86 views
0

我正在嘗試爲我的API編寫一個PUT請求。我正在使用restify來構建API。 我不斷收到錯誤,請幫忙?在Restify API,NodeJS,MongoDB中的PUT請求

//PUT (Update) Items 

    app.put('/items/:item_id', function(req, res){ 

    var query = Item.where({_id: req.params.item_id}); 
    query.findById(req.params.id, function (err, items) { 
    item.name = req.body.name; 
    item.description = req.body.description; 
    item.url = req.body.url; 

    req.item.save(function (err) { 
     if (!err) { 
      console.log("updated"); 
     } else { 
      console.log(err); 
     } 
     res.send(204, item); 
    }); 
}); 

我試着用郵差客戶端測試它,我得到這個錯誤

 { 
     "code": "InternalError", 
     "message": "Object #<Query> has no method 'findById'" 
    } 

感謝。

+1

您收到了哪些錯誤? – mfitzp 2015-02-23 12:50:30

+0

@mfitzp我試着用郵差客戶端測試它,我得到這個錯誤{ 「代碼」:「InternalError該」 「消息」:「對象#有沒有方法‘findById’」 } – Kokoliko 2015-02-23 13:29:37

+0

'findById'是貓鼬便利的方法。如果您使用的是本地'mongodb'驅動程序,則必須使用'find({_ id:req.params.id})' – ZeMoon 2015-02-23 13:38:35

回答

0

的findById方法在內部映射找到與參數{_id:}

您可以使用:

Item.find({_id: req.params.item_id}, function (err, items) { 

}); 

Item.findById(req.params.item_id, function (err, items) { 

}); 

兩者都是同樣的事情。原因是因爲當你寫的時候

var query = Item.where({_id: req.params.item_id}); 

返回查詢對象,其上無法調用findById方法。它只能在Item模型上調用。

如果您嘗試合併查詢,我會建議將它們組合在過濾器級別或使用聚合。

+0

謝謝,我將其更改爲query.find,並且出現錯誤'item'未定義 – Kokoliko 2015-02-23 13:52:05

+0

請參閱更改。 – ZeMoon 2015-02-23 13:57:31

+0

感謝您的回覆,我改變了它,我得到POSTMAN的錯誤 「」代碼「:」InternalError「, 」消息「:」項目未定義「' – Kokoliko 2015-02-24 15:19:05