Express - 使用错误处理

1. 同步错误

app.get('/', (req, resp) => {
  if(!req.query.name) {
    throw new Error('name query parameter required');
  }
  resp.end('ok');
});

2. 异步错误

异步错误,发生在回调函数中,需要通过next(err),才能捕获异步错误。

app.get('/', (req, resp, next) => {
  fs.readFile('./example.js', { encoding: 'utf8'}, (err, data) => {
    if(err) {
      next(err);
      return;
    }
    resp.end(data);
  });
});

3. 自定义错误处理函数

function errorHandler(err, req, resp, next)

  • err: 错误对象
  • req: 请求对象
  • resp: 响应对象
  • next: 下一个错误处理器
    错误处理器的本质也是中间件,需要放在所有中间件和路由函数的后面
const express = require('express');
const fs = require('fs');
const app = express();

// 设置路由
app.get('/', (req, resp, next) => {
  throw new Error('have  errors');
});

// 使用自定义错误处理记录日志并将error传递到下一个错误处理器
app.use((err, req, resp, next) => {
  fs.writeFile('./error.log', 
    `${req.method} ${req.url} Error: ${err.message}`,
    (err) => {
      next(err);
    });
});

//使用自定义错误处理
app.use((err, req, resp, next) => {
  resp.json({
    path: req.path,
    message: err.message
  });
});

app.listen(8080, () => {
    console.log('listen on 8080');
});
上一篇:【从零开始搭建uniapp开发框架】(十四)—— 处理H5字体兼容性问题


下一篇:嵌入式linux学习笔记--spdlog 使用动态库的方法记录