Я создаю Rest API, используя node.js, express и mongoDb. У меня была конечная точка для регистрации пользователя, которая просто добавляет данные пользователя в базу данных.
Схема пользователя выглядит так: -
const userSchema= new mongoose.Schema({
name:{
type:String,
required:true
},
referenceId:{
type:String,
default: ''
},
password:{
type:String,
required:true
}
})
Часть регистрации пользователя работает нормально, как и ожидалось.
Мне также нужна конечная точка, которая принимает идентификатор пользователя и возвращает данные пользователя в формате 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);
}
})
Эта часть также работает нормально, если пользователь существует с данным идентификатором. Если пользователь не существует, мне нужно вернуть собственное сообщение об ошибке. Но в этом случае возвращается приведенный ниже ответ.
{
"stringValue": "\"5eecac810ea3711230b58a9\"",
"kind": "ObjectId",
"value": "5eecac810ea3711230b58a9",
"path": "_id",
"reason": {}
}
Итак, мой вопрос в том, что это за странный ответ и как я могу обработать случай, когда пользователь не найден.
BTW 5eecac810ea3711230b58a9 - это искомый идентификатор пользователя, которого нет.
EDIT: -
После небольшой отладки я обнаружил, что управление программой передано блоку 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");
}
})