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错误
答案 0 :(得分:0)
如果其他人偶然理解原因,我将尝试更广泛地解释该错误。
_id
进入Mongo是用特定的方式创建的。您可以检查docs的含义,其中_id
是一个名为ObjectId
的对象,并由以下项组成:
这意味着不仅将接受任何值。
当您进行与_id
匹配的查询时,mongo会期望一个ObjectId
(或至少可以被解析为string
的类型)。
因此,如果您尝试使用错误的_id
(例如-1
或XXX
),则会引发错误。 Mongo无法将-1
解析为ObjectId
如果您正在测试应用程序,并且想使用伪造的_id
,则需要生成一个有效的应用程序。
使用mongoose
可以调用以下功能:mongoose.Types.ObjectId()
。
返回的值是一个新生成的_id
,因此它具有有效的格式。