我正在使用node.js,express和mongoDb创建一个Rest API。 我有一个用于用户注册的端点,该端点只是将用户详细信息添加到数据库中。
用户架构如下:-
const userSchema= new mongoose.Schema({
name:{
type:String,
required:true
},
referenceId:{
type:String,
default: ''
},
password:{
type:String,
required:true
}
})
用户注册部分工作正常。
我还需要一个接受用户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": {}
}
所以我的问题是,这是什么奇怪的答复?我该如何处理用户未找到的案件。
BTW 5eecac810ea3711230b58a9 是我搜索的用户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");
}
})
答案 0 :(得分:1)
未找到任何记录不是错误条件。要检查用户是否不存在,可以检查是否存在特定字段而不是if(!user)
。
类似
if(!user.id){
res.send("Could not found");
}