我正在使用Node.js,express和MongoDB创建一个Rest API。 我有一个用于用户注册的endpoint,它只是将用户详细信息添加到数据库中。
用户架构如下所示:-
const userSchema= new mongoose.Schema({
name:{
type:String,
required:true
},
referenceId:{
type:String,
default: ''
},
password:{
type:String,
required:true
}
})
用户注册部分工作正常,如预期。
我还需要一个endpoint,它接受用户id并以json格式返回用户详细信息。 这就是我到目前为止编码的内容。
/*
This endpoint returns the data of a single user with given user id
*/
router.get('/:id',async(req,res)=>{
//This function will return the registered user with given id.
try{
const user=await User.findById(req.params.id);
if(!user){
res.send("Could not found");
}
res.json(user);
}catch(err){
res.send(err);
}
})
如果使用给定ID的用户存在,则此部分也可以正常工作。 如果用户不存在,我需要返回一个自定义错误消息。 但在这种情况下,返回下面的响应。
{
"stringValue": "\"5eecac810ea3711230b58a9\"",
"kind": "ObjectId",
"value": "5eecac810ea3711230b58a9",
"path": "_id",
"reason": {}
}
所以我的问题是什么是这个奇怪的反应和我如何处理用户未发现的情况。
BTW5EECAC810EA3711230B58A9是我搜索的不存在的用户ID。
编辑:-
经过一点调试,我发现程序控制转移到catch块,响应是在catch块而不是try块中生成的。
/*
This endpoint returns the data of a single user with given user id
*/
router.get('/:id',async(req,res)=>{
//This function will return the registered user with given id.
console.log('Here');
try{
const user=await User.findById(req.params.id);
console.log(user._id);
res.json(user);
}catch(err){
//This works when user is not found
res.send("Could Not found");
}
})
找不到任何记录不是错误条件。 要检查用户是否不存在,可以检查特定字段是否存在,而不是if(!user)
。
类似于
if(!user.id){
res.send("Could not found");
}