我使用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'))
,则服务器会返回新错误,但我找不到如何返回错误。
答案 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();
}
});