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
(例如-1
或XXX
(,则会引发错误。Mongo无法将-1
解析为ObjectId
如果你正在测试你的应用程序,并且你想使用一个假的_id
,你需要生成一个有效的。
使用mongoose
,您可以调用并使用以下函数:mongoose.Types.ObjectId()
。
返回的值是新生成的_id
,因此它具有有效的格式。