Javascript 修改feathers hook.result中的响应状态代码
我最近一直在玩,我喜欢它。我有以下问题,但 在为Javascript 修改feathers hook.result中的响应状态代码,javascript,node.js,express,feathersjs,Javascript,Node.js,Express,Feathersjs,我最近一直在玩,我喜欢它。我有以下问题,但 在为update(httpput)服务器方法放置的一个before钩子中,我根据一些条件决定是创建还是更新。如果我选择create,我将使用hook.result跳过服务方法 let createLocation = (hook) => { return hook.app.service('locations').create({ "user": hook.data.user, "location": [{ "la
update(httpput)
服务器方法放置的一个before钩子中,我根据一些条件决定是创建
还是更新
。如果我选择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
”。我们将不胜感激。(如果可能的话,请指向处理此问题的源代码,我确实搜索了,但没有成功)。服务和挂钩与传输无关,这就是为什么它们可以通过WebSocket和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}
)