пытается получить пустой объект из запроса в mon goose, чтобы правильно обработать ошибку - PullRequest
0 голосов
/ 09 марта 2020

Мне жаль, что я впервые пишу вопрос о потоке стека, но до сих пор не нашел ответа, несмотря на мои поиски в Google. поэтому мне нужно получить пустой объект из запроса с помощью mon goose, чтобы я мог более точно обрабатывать ошибки. на данный момент есть только два возможных способа управления запросами.1: получить значение и отправить его обратно пользователю или 2: в случае сбоя запроса выдает ошибку в операторе .catch, и неважно, что я получить как неудавшийся запрос, он всегда проходит через .catch, но если пользователь отправляет ложный идентификатор, чтобы я мог отправить обратно статус 404 вместо того, чтобы позволить оператору catch позаботиться об этом. так как я должен справиться с этим правильно?

1. поэтому в операторе if я хочу, когда я запрашиваю ложный идентификатор, оператор if выполняется, но он никогда не выполняется и всегда сводится к уловке, которая не настолько точна для обработки его специфических c ошибок. ! мои коды следующие:

app.get('/users/:id', async (req, res) => {

  const _id = req.params.id;
  try {

    const user = await User.findById(_id)
      if(!user){
           return res.status(400).send('not found');
       }
        res.send(user)

  }  catch (e) {
    res.status(500).send(e)    
  }
})

1 Ответ

0 голосов
/ 09 марта 2020

Я не уверен, что будет ложным идентификатором, но вы можете сравнить идентификатор из пользовательского запроса с исходным _id, чтобы увидеть, совпадают ли они.

const user = await User.findById(_id)
      if(user._id !== _id){
           return res.status(400).send('not found');
       }
       res.send(user)

}   catch (e) {
      res.status(500).send(e) 
    }

Вы также можете добавить проверку, чтобы убедиться, что объект пользователя пуст.

const user = await User.findById(_id)
      if(user._id !== _id || Object.entries(user).length === 0){
           return res.status(400).send('not found');
       }
       res.send(user)

}   catch (e) {
      res.status(500).send(e) 
    }

Object.entries () возвращает массив с перечисляемыми свойствами объектов.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...