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)){
	...代码
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值