Node.jsとmongoDBを使用して色々と動かしていたところ、突然表題のエラーが出たことがありました。
そのときはNode.jsもmongoDBも触りたてだったので、初めて体験するNoSQLの簡潔さに少々興奮していたのですが、エラーを見て焦って調査したことを覚えています。
私と同じような方がいらっしゃるかもしれませんので、その際に調べた内容を記事にまとめようと思います。
目次
message: ‘Cast to ○○ failed for value “undefined” at path “□□”‘の意味とは?
このエラーの意味はまさにメッセージの通りです。
つまり、「○○型として定義されている□□に対して、undefined
をキャストすることはできませんよ」ということです。
mongoDBで型をキャストする際に、undefined
をキャストするなどして失敗すると、今回のエラーが発生します。
原因はundefinedをキャストしようとしていたことだった。
私の場合は、以下のようなエラー文となっていました。
Critical Error { CastError: Cast to number failed for value "undefined" at path "status"
(中略)
message: 'Cast to number failed for value "undefined" at path "status"',
name: 'CastError',
kind: 'number',
value: undefined,
path: 'status',
reason: undefined }
valueがundefined
となっていますね。
また、この時のソースコードも見てましょう。
だいたい以下のような感じで定義していました。
hoge.prototype.init = function(mongoose){
this.schema = new mongoose.Schema({
name: String,
password: String,
created: Number,
status: Number,
});
}
status
というkeyをnumber型で定義していたのですが、そこにundefined
をいれようとしたためにエラーが発生していたのです。
ここまで分かれば、あとはエラーが発生している値にundefined
が保存されないようにするだけです。
私の場合は、初回データ保存時にundefined
になることがあったので、その際はstatus: 1
で保存されるように修正したところ、次からはエラーが出なくなりました。
終わりに
今回はmongoDBでの型キャストエラーについてご紹介しました。
mongoDBは気軽に使えるのでサクッとデータを保存したくなるのですが、保存の際は不適切なデータが渡されないように、しっかりとチェックをしたほうが良いでしょう。
本日はここまでです。それでは。