NodeJs http状态异常处理

Nuw*_*ana 1 exception node.js express

我创建了nodejs + Express应用程序。现在在我的应用程序中,当异常捕获错误时发送如下

app.get('/data', (req, res) => {
      if(!req.params.token){
        return res.status(403).send('Access token not provided');
      }

      //do something here
    });
Run Code Online (Sandbox Code Playgroud)

而不是发送res.status(403).send('未提供访问令牌'); 我可以发送这样的东西吗

异常.js

class Forbidden {
    constructor(message,stack = null){
        this.code = 403;
        this.message = message
        this.stack = stack;
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序.js

var httpForbidden = require('exception.js');

app.get('/data', (req, res) => {
if(!req.params.token){
    return new httpForbidden ('Access token not provided');
}

//do something here
});
Run Code Online (Sandbox Code Playgroud)

我怎样才能在一个地方捕获所有异常?

rob*_*lep 7

你可以使用这样的东西:

class httpError {}

class httpForbidden extends httpError {
  constructor(message, stack = null) {
    super();
    this.code = 403;
    this.message = message
    this.stack = stack;
  }
}

app.get('/', (req, res) => {
  if (!req.params.token) {
    throw new httpForbidden('Access token not provided');
  }
  ...
});

app.use((err, req, res, next) => {
  if (err instanceof httpError) {
    return res.status(err.code).send(err.message);
  }
  res.sendStatus(500);
});
Run Code Online (Sandbox Code Playgroud)

这使用 Express错误处理中间件,该中间件将检查抛出的错误是否是一个实例httpError(这将是您想要创建的所有 HTTP 错误类的超类),如果是,将生成一个特定的响应根据代码和消息(或否则生成通用 500 错误响应)。