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"

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時就會出錯。

解決方法:

  1. 修改接口路徑,如將"/orders/:id"改爲“/orders/details/:id”
  2. 調用mongoose的API,isValidObjectId判斷一個值是否爲ObjectId的類型
if (isValidObjectId(val)){
	...代碼
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章