强制转换错误:模型"Product"路径 "_id" 处的值"XXX"强制转换为对象 ID 失败



enter code here
const express=require('express');
const router= express.Router();
const asyncHandler = require('express-async-handler');

const Product=require('../models/productModel');
router.get('/', asyncHandler(async (req,res)=>{
const products=await Product.find({})
res.send(products)
}));
router.get('/:id',asyncHandler(async(req,res)=>{
const product=await Product.findById(req.params.id)

if(product){
res.json(product)
}else{
res.status(404).json({message:"product not found"})
}`enter code here`
}));

enter code here
module.exports=router`enter code here`

在这里,我在邮递员或浏览器中获得产品和id为的产品的数据,但如果我输入了错误的id,它会显示castError,在控制台日志中,它显示它是内部服务器500错误

我会尝试更广泛地解释这个错误,以防其他人碰巧理解原因。

_id的into Mongo是以一种特定的方式创建的。您可以查看文档,其中解释了_id是一个名为ObjectId的对象,由合成

  • 一个4字节的时间戳值,表示ObjectId的创建,自Unix epoch以来以秒为单位测量
  • 一个5字节的随机值
  • 一个3字节递增计数器,初始化为随机值

这意味着不会只接受任何值。

当您执行与_id匹配的查询时,mongo期望ObjectId(或者至少是可以解析为string的come类型(。

因此,如果您尝试使用坏的_id(例如-1XXX(,则会引发错误。Mongo无法将-1解析为ObjectId

如果你正在测试你的应用程序,并且你想使用一个假的_id,你需要生成一个有效的。

使用mongoose,您可以调用并使用以下函数:mongoose.Types.ObjectId()

返回的值是新生成的_id,因此它具有有效的格式。

相关内容

最新更新