Express.js:使用http状态代码捕获所有错误处理程序

时间:2019-04-02 20:56:29

标签: node.js express error-handling

我正在使用这个很棒的npm软件包 http-status-codes  这对状态代码有帮助,据我个人的看法 error handling 在Express中。

所以我的问题是,这将是解决错误的好方法吗?

这些错误(如果发生了……哈!)最终不会被抓住的  没事吧?

//my routes

router
  .route('/')
  .get(function(req, res, next) {
    return UserModel.find({}, function(err, users) {
      if (err) next(err);
      res.json(users);
    }).exec();
  })
  .post(async (req, res) => {
    var newUser = new UserModel({
      username: req.email,
      password: req.password
    });
    newUser.save(function(err, user) {
      res.json(user);
    });
  });

router.route('/:id').get(function(req, res) {
  return UserModel.findById(req.params.id)
    .then(user => {
      if (!user) {
        return res.status(404).end();
      }
      return res.status(200).json(user);
    })
    .catch(err => next(err));
});


// error handler

function errorHandler(err, req, res, next) {
  // Set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // Log error
  console.error(err.stack);

  // Render the error page
  res.status(err.status || 500);

  // Default error message by HTTP code
  res.render('error', {
    title: HttpStatus.getStatusText(err.status),
    message: HttpStatus.getStatusText(err.status)
  });
}

// then pass errorHandler in this catch all

 app.use(errorHandler, function(error, req, res, next) {
  res.json({ message: error.message });
});

0 个答案:

没有答案