使用自定义错误对象格式返回错误

时间:2017-07-14 12:49:35

标签: feathersjs

我正在尝试定义我自己的错误格式,以便在响应中返回。 我编写了自己的中间件:

function catchAndLogErrors(app) {
    return function (err, req, res, next) {
       // stuff happening...
       throw new Error(err.message, {name: err.name, code: err.code, className: err.className, info: err.info, data: err.data});
    };
}

然后在/src/middleware/index.js我评论了handler并放置了我自己的中间件:

const handler = require('feathers-errors/handler');
const catchAndLogErrors = require('my-middleware');
...

app.use(catchAndLogErrors(app));
// app.use(handler());

但是我得到了以HTML格式返回的错误,它实际上只是消息和堆栈跟踪,但没有其他属性。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

由于您注释掉了Feathers error handler,您必须实现自己的Express error handler格式化错误并发送响应(而不是仅仅抛出它)与此类似(如果您要发送JSON):

function catchAndLogErrors(app) {
    return function (err, req, res, next) {
      res.json(err);
    };
}

修改服务方法调用错误的真正的Feathers方法是error hooks。他们允许您将hook.error修改为您需要的响应,例如application wide hook适用于所有服务电话:

app.hooks({
  error(hook) {
    const err = hook.error;

    //change `hook.error` to the modified error    
    hook.error = new Error(err.message, {
      name: err.name,
      code: err.code,
      className: err.className,
      info: err.info,
      data: err.dat
    });
  }
});