Nodejs 之 异常的处理和记录

异常的处理

对于异常的在promise中我们通常用catch, 在async/await中我们通常用try…catch…, 这造成的问题是代码冗余,处理相同的错误我们也要在不同的位置多次修改,因此在express中我们可以使用自定义中间件来创造一个错误处理中间件,例

// async.js
module.exports = function(handler) {
  return async (req, res, next) => {
    try {
      await handler(req, res);
    } catch (ex) {
      next(ex);
    }
  }
}

// index.js
const asyncMiddleware = require('../middleware/async');

router.get('/getPosts', asyncMiddleware(async (req, res) => {
  await allUsers = await User.findAll();
  res.send(allUsers);
}));

这样就批量完成了错误的处理。 但这个方法的缺点是在api这里要调用asyncMiddlware这个方法。 更简单的方法当然是使用npm包啦,就是express-async-errors, 导入之后就会自动处理异步请求了

异常的记录

winston 是一个常用的错误记录库。 winston中一个重要的名词是transport, 其实就是数据的存储,他可以存储到本地的文件中,存储到数据库中,或者通过http存储到其他数据平台。 winston中记录的错误可以分为不同的错误等级

{ error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6 }

如果没有指定错误等级,winston会默认按照上面的错误等级


Posted

in

by

Tags: