检查 Express Mongoose 中是否 req.param.dogid / req.param.dogname
Check if req.param.dogid / req.param.dogname in Express Mongoose
我在同一个文件中有 2 个 GET 函数。
一个用于 dogid,另一个用于 dogname。
//Operations for api/dogs/{dogId} route
//get operation
router.get('/:dogId', async (req,res)=>{
try{
const dog = await Dogs.findById(req.params.dogId);
res.json(dog);
}catch(error){
res.json({message:error});
}
})
和
//Operations for api/dogs/{dogName} route
//get operation
router.get('/:dogName', async (req,res)=>{
try{
const dog = await Dogs.find({'name': { $in: req.params.dogName}})
res.json(dog);
}catch(error){
res.json({message:error});
}
})
当我尝试 npm start 时,它没有出现任何问题。
但是在 Postman 中,当我为 http://localhost:3000/api/dogs/Sasha
发送 GET 操作时
然后显示如下:
{
"message": {
"stringValue": "\"Sasha\"",
"valueType": "string",
"kind": "ObjectId",
"value": "Sasha",
"path": "_id",
"reason": {},
"name": "CastError",
"message": "Cast to ObjectId failed for value \"Sasha\" (type string) at path \"_id\" for model \"Doggies\""
}
}
获取狗名数据的代码已经存在。但是由于 dogid 路由的 get 函数是在 dogname 路由之前编写的,所以它显示了这个错误。
问题是 GET api/dogs/:dogId 正在处理请求,因为它是在 GET api/dogs/:dogname.
之前写入的
要解决此问题,请尝试更改 api 设计或使用不同的 HTTP 请求方法。例如:
POST api/dogs/:dogId
GET api/dogs/:dogName
or GET api/animals/dogs/:dogId
GET api/dogs/:dogName
但不要这样做:
GET api/dogs/:dogId
GET api/dogs/:dogName
正如@Mohammad Ismail 已经指出的,您需要使用不同的 HTTP 方法来区分 2 个路由。
还有一种方法是使用query
代替param
您发送 localhost:3000/api/dog?dogName=abc
这样的请求
然后在您的代码中:req.query.dogName
将为您提供值 abc
我在同一个文件中有 2 个 GET 函数。
一个用于 dogid,另一个用于 dogname。
//Operations for api/dogs/{dogId} route
//get operation
router.get('/:dogId', async (req,res)=>{
try{
const dog = await Dogs.findById(req.params.dogId);
res.json(dog);
}catch(error){
res.json({message:error});
}
})
和
//Operations for api/dogs/{dogName} route
//get operation
router.get('/:dogName', async (req,res)=>{
try{
const dog = await Dogs.find({'name': { $in: req.params.dogName}})
res.json(dog);
}catch(error){
res.json({message:error});
}
})
当我尝试 npm start 时,它没有出现任何问题。
但是在 Postman 中,当我为 http://localhost:3000/api/dogs/Sasha
发送 GET 操作时然后显示如下:
{
"message": {
"stringValue": "\"Sasha\"",
"valueType": "string",
"kind": "ObjectId",
"value": "Sasha",
"path": "_id",
"reason": {},
"name": "CastError",
"message": "Cast to ObjectId failed for value \"Sasha\" (type string) at path \"_id\" for model \"Doggies\""
}
}
获取狗名数据的代码已经存在。但是由于 dogid 路由的 get 函数是在 dogname 路由之前编写的,所以它显示了这个错误。
问题是 GET api/dogs/:dogId 正在处理请求,因为它是在 GET api/dogs/:dogname.
之前写入的要解决此问题,请尝试更改 api 设计或使用不同的 HTTP 请求方法。例如:
POST api/dogs/:dogId
GET api/dogs/:dogName
or GET api/animals/dogs/:dogId
GET api/dogs/:dogName
但不要这样做:
GET api/dogs/:dogId
GET api/dogs/:dogName
正如@Mohammad Ismail 已经指出的,您需要使用不同的 HTTP 方法来区分 2 个路由。
还有一种方法是使用query
代替param
您发送 localhost:3000/api/dog?dogName=abc
这样的请求
然后在您的代码中:req.query.dogName
将为您提供值 abc