2017-08-26 9 views
-1

私はRESTAPIを作成しています。コードを書いた後、POSTMANにエラーメッセージが表示されます。この問題を解決することはできません。エラー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); 
    }); 
}); 

エラー、POSTMANとブラウザ:

{ 
    "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

you'rコードは正常に見えるが、私のコードで私はfindOne使用される「findById」を使用していませんでした:あなたのコード内

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)で、それができます」応答を2回返します。 "if"条件内でres.send(err)の後にreturnを使うか、IfElseを使います。

NodeJSは非同期で、res.sendの後にすべてのコードの実行を続けます。

0

私はこれを使用すると、それはあなたがどのようなURLを送信ん

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