猫鼬的findById函数返回奇怪的响应

时间:2020-06-19 13:07:09

标签: javascript node.js mongodb express mongoose

我正在使用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");
    }
})

1 个答案:

答案 0 :(得分:1)

未找到任何记录不是错误条件。要检查用户是否不存在,可以检查是否存在特定字段而不是if(!user)

类似

if(!user.id){
   res.send("Could not found");
}
相关问题