Strongloop:如果Operation Hook失败,你如何返回错误?

时间:2015-05-29 05:37:47

标签: strongloop loopback

如何在操作挂钩中返回错误?

用例是在保存新模型实例后发送推送通知。

我观察'after save'事件,发送推送。如果由于某种原因失败,我想发送500 response代码。我该怎么做?

我无法找到ctx对象实际上或包含的内容的文档。

  Customer.observe('after save', function(ctx, next) {

  //model saved, but sending push failed for whatever reason, and I want to now send a 500 error back to the user
  //how?  what's inside ctx? how do you send back a response?  
  next();
});

谢谢

3 个答案:

答案 0 :(得分:11)

我相信它是这样的:

var error = new Error();
error.status = 500;
next(error);

答案 1 :(得分:9)

扩展上一个答案,因为我还无法添加评论。

您可以通过以下方式为错误响应提供更多信息:

var error = new Error();
error.status = 401;
error.message = 'Authorization Required';
error.code = 'AUTHORIZATION_REQUIRED';

这将返回如下内容:

{
   "error": {
      "name": "Error",
      "status": 401,
      "message": "Authorization Required",
      "code": "AUTHORIZATION_REQUIRED",
      "stack": "Error: Authorization Required\n    at ..."
   }
}

答案 2 :(得分:0)

有关于 ctx 实际包含的详细文档。它可以在Loopback after-save operation hook docs中找到。

ctx对象具有instance方法,该方法返回已保存的模型实例。您可以在检查模型实例后返回错误,如下所示:

if (ctx.instance) {
  // check if your push operation modified the instance
  // If condition is not met, throw the error
  var error = new Error()
  error.status = 500
  error.message = '...'
  next(error)
}

上面的文档涵盖了after save钩子的ctx对象的属性。