使用loopback内置方法,捕获错误并不返回任何错误

时间:2017-09-21 08:58:41

标签: loopbackjs

我使用Loopback 3。 使用我的客户端应用程序,我使用POST用户方法来创建新用户。如果电子邮件地址已经存在,则服务器响应状态422的错误。 我想抓住这个错误,以便服务器返回没有错误

我尝试使用像这样的afterRemoteError:

User.afterRemoteError('create', function(context, next) {
  if (context.error && context.error.statusCode === 422
      && context.error.message.indexOf('Email already exists') !== -1
      && context.req.body && context.error.message.indexOf(context.req.body.email) !== -1) {
    context.error = null;
    next(null);
  } else {
    next();
  }
});

但是这不起作用,服务器仍然返回原始错误。如果我尝试将next(null)替换为next(new Error('foo')),则服务器会返回新错误,但我找不到如何返回错误。

1 个答案:

答案 0 :(得分:1)

坦克向我的同事找到解决问题的方法!

事实是,如果我们使用next(),则会在中间件流中触发afterRemoteError。解决方案是使用明确的语法自我发​​送响应:

User.afterRemoteError('create', function(context, next) {
    if (context.error && context.error.statusCode === 422
        && context.error.message.indexOf('Email already exists') !== -1
        && context.req.body && context.error.message.indexOf(context.req.body.email) !== -1)
    {
        context.res.status(200).json({foo: 'bar'});
    } else {
        next();
    }
});