Saat mengirim permintaan ke /customers/41224d776a326fb40f000001
dan dokumen dengan _id
41224d776a326fb40f000001
tidak ada, doc
adalah null
dan saya mengembalikan 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);
});
};
Namun, ketika _id
tidak cocok dengan apa yang diharapkan Mongoose sebagai "format" (saya kira) misalnya dengan GET /customers/foo
kesalahan aneh dikembalikan:
CastError: Transmisi ke ObjectId gagal untuk nilai "foo" di jalur "_id".
Jadi apa kesalahan ini?
_id
dalam skema Mongoose Anda. Dalam"bla"
kasus ini Anda akan menggunakan jenisString
alih - alih defaultObjectId
dan Anda tidak perlu menambahkan centang ini karena apa pun dapat dilemparkan ke string.ObjectId
dari string yang diberikan (dariGET
permintaan) untuk meneruskannya kefindById
metode?ObjectId("000000000000") --> 303030303030303030303030
Gunakan fungsi yang ada untuk memeriksa ObjectID.
sumber
'your id here'
contoh Anda . github.com/mongodb/js-bson/issues/106Apakah Anda mengurai string itu sebagai
ObjectId
?Di sini, di aplikasi saya, yang saya lakukan adalah:
sumber
mongoose.Types.ObjectId
.fromString
bukan fungsiSaya memiliki masalah yang sama saya menambahkan
_id: String .in skema kemudian mulai bekerja
sumber
Saya harus memindahkan rute saya di atas rute lain yang menangkap parameter rute:
sumber
yang terbaik adalah memeriksa validitas
sumber
Dalam kasus saya, saya harus menambahkan
_id: Object
ke Skema saya, dan kemudian semuanya bekerja dengan baik.sumber
Anda juga dapat menggunakan ObjectId.isValid seperti berikut:
sumber
sumber
Saya dihadapkan dengan sesuatu yang serupa baru-baru ini dan menyelesaikannya dengan menangkap kesalahan untuk mengetahui apakah itu kesalahan Mongoose ObjectId.
sumber
Mulai 19 November 2019
Anda dapat menggunakan
isValidObjectId(id)
dari luwak versi 5.7.12https://mongoosejs.com/docs/api/mongoose.html#mongoose_Mongoose-isValidObjectId
sumber
Saya menggunakan adaptasi dari solusi @gustavohenke, mengimplementasikan ObjectId cor dalam percobaan-menangkap yang dibungkus di sekitar kode asli untuk memanfaatkan kegagalan casting ObjectId sebagai metode validasi.
sumber
Ini adalah pertanyaan lama tetapi Anda juga dapat menggunakan paket validator-ekspres untuk memeriksa parameter permintaan
express-validator versi 4 (terbaru):
express-validator versi 3:
sumber
Selalu gunakan
mongoose.Types.ObjectId('your id')
untuk kondisi dalam kueri Anda, ini akan memvalidasi bidang id sebelum menjalankan kueri Anda sebagai hasilnya aplikasi Anda tidak akan mogok.sumber
ATAU Anda bisa melakukan ini
var ObjectId = require('mongoose').Types.ObjectId; var objId = new ObjectId( (param.length < 12) ? "123456789012" : param );
seperti yang disebutkan di sini metode find Mongoose dengan $ or condition tidak bekerja dengan baik
sumber
Cara saya memperbaiki masalah ini adalah mengubah id menjadi string
Saya suka dengan backtick:
`${id}`
ini seharusnya memperbaiki masalah tanpa biaya tambahan
sumber
ObjectId terdiri dari hal-hal berikut.
Cara yang benar untuk memvalidasi jika objectId valid adalah dengan menggunakan metode statis dari kelas ObjectId itu sendiri.
mongoose.Types.ObjectId.isValid (sample_object_id)
sumber
Transmisikan string ke ObjectId
sumber
Mendeteksi dan Mengoreksi Kesalahan ObjectID
Saya tersandung masalah ini ketika mencoba menghapus item menggunakan luwak dan mendapatkan kesalahan yang sama. Setelah melihat-lihat string kembali, saya menemukan ada beberapa spasi ekstra di dalam string yang dikembalikan yang menyebabkan kesalahan bagi saya. Jadi, saya menerapkan beberapa jawaban yang disediakan di sini untuk mendeteksi id yang salah lalu menghapus spasi ekstra dari string. Berikut adalah kode yang berhasil bagi saya untuk akhirnya menyelesaikan masalah tersebut.
Ini berhasil untuk saya dan saya berasumsi jika item lain mulai muncul di string kembali, mereka dapat dihapus dengan cara yang sama.
Saya harap ini membantu.
sumber
Saya memperbaiki masalah ini dengan mengubah urutan rute.
sumber
Saya mengalami masalah dengan ini dan tetap melakukannya
mongoose.ObjectId(id)
tanpaTypes
sumber