Im做上的NodeJS和MongoDB,但即時通訊卡上的DELETE方法一個RESTful服務器中刪除,因爲我嘗試了req.body.listId鑄成時收到錯誤HTTP使用的NodeJS和MongoDB
"Argument passed in must be a single String of …modules\express\lib\router\index.js:174:3"
的ObjectId。
這裏是我的代碼:
router.delete('/', function(req, res){
var db = req.db;
var collection = db.get('listcollection');
var oId = new ObjectId(req.body.listId); //The exception is here
collection.remove(
{
"_id": oId
},function(err,doc){
if (err) {
res.json("There was a problem deleting the information to the database.");
}
else {
res.json("Successfully deleted");
}
}
);
});
解決!: 的listId參數被引述( 「58f8b2cc8cf726ca76551589」),所以我做了一個切片。無論如何,我改變了在URL中收到的參數,下面是代碼:謝謝!
router.delete('/:listId', function(req, res){
var db = req.db;
var collection = db.get('listcollection');
var listId = req.params.listId;
listId = listId.slice(1, listId.length - 1);
var oId = new ObjectId(listId);
collection.remove(
{
"_id": oId
},function(err,doc){
if (err) {
res.json("There was a problem deleting the information to the database.");
}
else {
res.json("Successfully deleted");
}
}
);
});
刪除方法的參數只能通過查詢字符串/ URL本身傳遞,而不是像post或put –
您能告訴我們您的請求身體是什麼樣子嗎?你發佈了什麼?這聽起來像'req.body.listId'的內容違反了'ObjectId'的限制。此外,如前所述,在URL中指定id會更加RESTful,因此您的路由將變成'router('/:id')',然後您可以通過'req.params以快速方式訪問id。 id'。 – benjiman
listId參數被引用(「58f8b2cc8cf726ca76551589」),所以我做了一個切片。無論如何,我改變了在URL中收到的參數。謝謝! –