修改羽毛钩子中的响应状态代码



我最近一直在玩羽毛.js,我喜欢它。我有以下问题,但是...

在为服务器方法放置update (http put)钩子中,我根据某些条件决定是create还是update。如果我选择create我会使用 hook.result 跳过服务方法

let createLocation = (hook) => {
  return hook.app.service('locations').create({
    "user": hook.data.user,
    "location": [{
      "latitude": hook.data.location[0].latitude,
      "longitude": hook.data.location[0].longitude
    }]
  }).then(location => {
     hook.result = location;
     //************ change the response status code here?? **************\
  });
};

但是我无法更改响应状态代码以坚持201 created。帮助将不胜感激。(如果可能的话,也请指出处理此问题的源代码,我确实搜索但没有成功(。

服务和钩子与传输无关,这就是为什么它们可以通过websockets和HTTP使用的原因。任何特定于HTTP的逻辑都应该存在于自己的中间件中。有两种选择。要为所有服务设置状态代码,您可以实现自定义格式化程序,对于特定服务,您可以注册特定于服务的中间件。

如果无法从数据中扣除状态代码,则可以在数据对象上定义一个隐藏属性(不可写,在将其转换为 JSON 时不会显示(:

let createLocation = (hook) => {
  return hook.app.service('locations').create({
    "user": hook.data.user,
    "location": [{
      "latitude": hook.data.location[0].latitude,
      "longitude": hook.data.location[0].longitude
    }]
  }).then(location => {
    Object.defineProperty(location, '__status', {
      value: 201
    });
    hook.result = location;
  });
};

并在自定义格式化程序中使用它:

const app = feathers();
function restFormatter(req, res) {
  res.format({
    'application/json': function() {
      const data = res.data;
      res.status(data.__status || 200);
      res.json(data);
    }
  });
}
app.configure(rest(restFormatter));

还有其他选项,例如将响应传递给参数或返回具有附加元信息的包装对象({ status, data }(。

相关内容

  • 没有找到相关文章

最新更新