Как NodeJS и ExpressJS могут выдавать ошибку? - PullRequest
3 голосов
/ 15 апреля 2019

Веб-приложение использует экспресс для сервера, Nodejs в качестве языка, MongoDB в качестве базы данных и mongoose в качестве оболочки. Express работает на сервере с портом 3000, и я пытаюсь реализовать базовый CRUD для коллекции. Я использую Newrelic для генерации графиков и вижу, что при ошибке экспресс-броска сервер времени отклика поднимается например:

User.findOne({ $or: [{ email: { $regex: new RegExp(email, 'i') } }, { userLogin: { $regex: new RegExp(userLogin, 'i') } }] }, 'id').exec()
    .then(results => {
        if (results) { throw new APIError('email_taken') } 
        else { return results }
  }).then(result => {
      res.status(201).success(result)
    }, error => {
      res.error(error)
    })

Я действительно не понимаю, почему время сервера увеличивается, когда ExpressJS выдает такую ​​ошибку. Я хочу знать, если мой метод имеет ошибку или есть другой метод лучше. И спасибо.

1 Ответ

0 голосов
/ 15 апреля 2019

Если вы просматриваете документацию ExpressJS по обработке ошибок , в ней говорится, что

Ошибки, возникающие в синхронном коде внутри обработчиков маршрутов и промежуточного программного обеспечения, не требуют дополнительной работы.Если синхронный код выдает ошибку, то Express перехватит и обработает ее.

Но

Для ошибок, возвращаемых асинхронными функциями, вызываемыми обработчиками маршрута и промежуточным программным обеспечением, необходимо передатьих в функцию next (), где Express будет их отлавливать и обрабатывать.

Поскольку ваша операция с базой данных является асинхронной по своей природе, вы должны всегда передавать ошибку в next () для ее правильной обработки

Пример

app.get("/", function (req, res, next) {
  fs.readFile("/file-does-not-exist", function (err, data) {
    if (err) {
      next(err); // Pass errors to Express.
    }
    else {
      res.send(data);
    }
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...