[解決済み] Mongoose のエラー Cast to ObjectId failed for value XXX at path "_id" とは何ですか?
2022-04-21 03:06:20
質問
にリクエストを送信する場合
/customers/41224d776a326fb40f000001
という文書と
_id
41224d776a326fb40f000001
は存在しない。
doc
でございます
null
を返しています。
404
:
Controller.prototype.show = function(id, res) {
this.model.findById(id, function(err, doc) {
if (err) {
throw err;
}
if (!doc) {
res.send(404);
}
return res.send(doc);
});
};
ただし、その際
_id
は、Mongoose が期待する「形式」(と思われるもの)と一致しません。
GET /customers/foo
という変なエラーが返されます。
CastError: パス "_id" にある値 "foo" に対する ObjectId へのキャストに失敗しました。
では、このエラーは何でしょうか?
解決方法は?
マングースの
findById
メソッドは
id
パラメータを、モデルの
_id
フィールドを作成し、マッチする doc を適切にクエリできるようにします。 これはObjectIdですが
"foo"
は有効な ObjectId ではないため、キャストは失敗します。
この現象は
41224d776a326fb40f000001
この文字列は有効な ObjectId であるためです。
これを解決する1つの方法は、(1) の前にチェックを追加することです。
findById
の呼び出しで
id
が有効なObjectIdであるかどうか、このように確認します。
if (id.match(/^[0-9a-fA-F]{24}$/)) {
// Yes, it's a valid ObjectId, proceed with `findById` call.
}
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン