2017-08-26 61 views
-1

我正在創建一個RESTAPI,並且在使用POSTMAN編寫代碼之後,它在POSTMAN中返回了一條錯誤消息,並且我無法解決此問題或在Web上找到解決方案。錯誤NODE.JS,在路由

CODE:

router.route('/messages/:message_id').get(function(req, res) { 
    Message.findById(req.params.message_id, function(err, message) { 
    if (err)  
     res.send(err); 
    res.json(message); 
    }); 
}); 

錯誤,郵遞員,瀏覽器:

{ 
    "stack":"Error 
    at MongooseError.CastError (/home/carlos/www/restapi/node_modules/mongoose/lib/error/cast.js:18:16) 
    at ObjectId.cast (/home/carlos/www/restapi/node_modules/mongoose/lib/schema/objectid.js:134:13) 
    at ObjectId.castForQuery (/home/carlos/www/restapi/node_modules/mongoose/lib/schema/objectid.js:187:17) 
    at module.exports (/home/carlos/www/restapi/node_modules/mongoose/lib/cast.js:205:32) 
    at Query.cast (/home/carlos/www/restapi/node_modules/mongoose/lib/query.js:2492:10) 
    at Query.findOne (/home/carlos/www/restapi/node_modules/mongoose/lib/query.js:1237:10) 
    at Function.findOne (/home/carlos/www/restapi/node_modules/mongoose/lib/model.js:1160:13) 
    at Function.findById (/home/carlos/www/restapi/node_modules/mongoose/lib/model.js:1097:15) 
    at /home/carlos/www/restapi/routes.js:40:17 
    at Layer.handle [as handle_request] (/home/carlos/www/restapi/node_modules/express/lib/router/layer.js:95:5) 
    at next (/home/carlos/www/restapi/node_modules/express/lib/router/route.js:131:13) 
    at Route.dispatch (/home/carlos/www/restapi/node_modules/express/lib/router/route.js:112:3) 
    at Layer.handle [as handle_request] (/home/carlos/www/restapi/node_modules/express/lib/router/layer.js:95:5) 
    at /home/carlos/www/restapi/node_modules/express/lib/router/index.js:277:22 
    at param (/home/carlos/www/restapi/node_modules/express/lib/router/index.js:349:14) 
    at param (/home/carlos/www/restapi/node_modules/express/lib/router/index.js:365:14)", 
    "message":"Cast to ObjectId failed for value \"<id>\" at path \"_id\"", 
    "name":"CastError", 
    "kind":"ObjectId", 
    "value":"<id>", 
    "path":"_id" 
} 
+0

你送什麼網址? – alexmac

+0

localhost:8080/messages/ Techtique

+0

你使用真實ID還是字符串''? – alexmac

回答

0

找你的代碼看起來不錯,但在我的代碼我沒有使用「findById」我用findOne:

Message.findOne({ _message_id: req.params.message_id},... 
0

堆棧跟蹤給你提示 「演員到的ObjectId失敗值\」 \ 「的路徑\」 _ ID \「」

我假設Message.findById()需要不同的id格式。你提供了「」,這似乎不是正確的行ID值。爲您想要提取的郵件提供正確的字符串/數字ID。

+0

然後錯誤可能在Message.findById(),我會建議什麼?我是一個初學者,我還不知道 – Techtique

+0

我認爲你的代碼中的問題是,.findById()需要一個ObjectId類型的對象,而不是你正在使用的字符串。嘗試將** req.params.message_id **更改爲** mongoose.Types.ObjectId(req.params.message_id)**。 –

0

代碼中的其他錯誤是物體響應(RES),它可以」 t返回兩次迴應。在「if」條件中使用res.send(err)後面的返回值或使用IfElse。

永遠不要忘記,NodeJS是異步的,並繼續在res.send之後執行所有代碼。

0

我用這個和它的工作

router.get('/articles/:id', function(req, res, next) { 
 
    Article.findById(req.params.id, function(err, article){ 
 
     if (err) 
 
     res.send(err); 
 
     res.json(article); 
 
    }); 
 
});