http的响应对象上的自定义属性

时间:2016-06-24 21:53:42

标签: node.js http promise

是否存在使用您自己的值装饰response对象的约定。

我遇到了一种我正在使用promises的情况,我只能返回一个值,我需要返回bodyresponse对象。

我尝试创建表单的对象但对它不满意。

resolve({body: body, response: response})

response.body = body
resolve(response);

我也遇到了res.locals的灵感。

我希望在响应对象上找到一个可以填充实例的属性

response.locals = {};
response.locals.body = body 
resolve(response);

我尝试在response对象上查找某个属性,该属性可能会以某种方式自动填充此body但不能。请告知最好的。

修改

很抱歉,如果问题与expressjs混淆,那就是require('https') response对象。

1 个答案:

答案 0 :(得分:1)

对于一般的promises,返回多个值的常用方法是将它们放入数组中并使用数组解析或将它们放在一个对象中并使用该对象解析(如您所做)。我不知道为什么你不满意:

resolve({body: body, response: response})

因为这是解决具有多个命名值的promise的典型方法。在ES6中,您甚至可以将其缩短为:

resolve({body, response})

这只是同一对象定义的语法快捷方式。

通常需要注意避免使用任何其他代码可能正在使用的标准属性或属性的属性名称冲突,您可以自由地将自己的自定义属性添加到response对象。该对象仅在此特定响应的持续时间内存在,因此您添加到该对象的任何属性仅在此响应处理的持续时间内是暂时的。

所以,你的第二个选择也很好:

response.body = body
resolve(response);

至于将来的证据,使用您自己的自定义对象是最具未来性的证据,因为它是您的对象。没有人会修改它,并且没有机会与第一个选项发生名称冲突。

至于向response对象添加属性,没有就如何向响应对象添加自定义属性的约定,这些属性永远不会干扰对象的未来设计和演变。如果您将自己的自定义前缀添加到属性名称(例如response._my_body),如果您真的希望以这种方式增加安全的可能性,那么您可能是安全的。您甚至可以使用本地生成的ES6符号作为属性名称,并且100%确定没有碰撞,尽管这会使代码变得更加难看。

就个人而言,我只是用我自己的对象解析或者自己定义属性名称前缀。