Пн goose функция findById возвращает странный ответ - PullRequest
0 голосов
/ 19 июня 2020

Я создаю 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");
    }
})

1 Ответ

1 голос
/ 19 июня 2020

Отсутствие каких-либо записей не является ошибкой. Чтобы проверить, не существует ли пользователь, вы можете проверить, существует ли определенное поле c, а не if(!user).

Что-то вроде

if(!user.id){
   res.send("Could not found");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...