Cast to ObjectId failed for value "search" at path "_id" for model "Order"
Cast to ObjectId failed for value “search” at path “_id” for model “Order”
在使用express + mongoose開發商場應用時,在後臺管理系統中篩選訂單信息,突然出現下面這種錯誤:
錯誤信息爲在模型“Order”的路徑“ _id”處,“search”強制轉換爲ObjectId失敗。
代碼如下:
//查找 訂單 根據查找條件
router.get('/orders/search', async (req, res) => {
try {
let params = {};
const { title, status = 0 } = req.query;
if (title) {
params['title'] = title;
}
const orders = await Order.find(params, { updateTime: 0 }).populate('user', 'name').populate('book', 'name image price').exec();
const total = await Order.countDocuments();
return res.send({
code: 200,
result: {
total,
orders
}
});
} catch (error) {
console.log(error);
}
});
最後發現,上一個接口的路徑爲**/orders/:id**,並在此接口中使用findById的方法查詢。而在請求serch這個接口時,"search"作爲id的值,在調用findById時就會出錯。
解決方法:
- 修改接口路徑,如將"/orders/:id"改爲“/orders/details/:id”
- 調用mongoose的API,isValidObjectId判斷一個值是否爲ObjectId的類型
if (isValidObjectId(val)){
...代碼
}