我可以使用http.ServerResponse作为node.js中的原型吗?
我无法得到这个工作:
var proxyResponse = function(res) { return Object.create(res); };
调用此方法返回的对象上的标准响应方法不起作用,例如:
http.createServer(function(req, res) { res = proxyResponse(res); res.writeHead(200, {"Content-Type": "text/html"}); res.end("Hallelujah! (Praise the Lord)"); }).listen(8080);
服务器挂起。 有人可以解释我做错了什么?
从MDC :
Object.create(proto [, propertiesObject ])
这创build了一个新的对象,其原型是原型的,对象本身没有任何定义:
res.foo = function() { console.log(this); } res.foo(); res = proxyResponse(res); res.foo();
结果:
{ socket: { fd: 7, type: 'tcp4', allowHalfOpen: true, _readWatcher: { socket: [Circular], .... {}
那么为什么不抛出一个错误和爆炸? 除了混乱的财产查找和设置,有一个原因,它不起作用。
当你的新对象引用与旧的对象相同的对象时,本身并不是旧对象。
在: https : //github.com/ry/node/blob/a0159b4b295f69e5653ef96d88de579746dcfdc8/lib/http.js#L589
if (this.output.length === 0 && this.connection._outgoing[0] === this) {
这完成了请求, this
是新的对象,但this.connection._outgoing[0]
仍然引用旧的对象,所以请求永远不会完成,服务器挂起。
我仍然不知道你在这里试图达到什么目的,因为在这里使用Object.create
是没有意义的,如果你担心在另一个请求的情况下res被覆盖,事实并非如此,因为每个res是它自己引用不同对象的variables。
- 用Angular,Express和Jade刷新特定页面(使用html5mode)
- 节点js和Redis未定义的JSON属性
- 如何用sinon.js将全局依赖项的新实例方法存留在nodejs中
- 在通过gulp-submodule注入依赖项的模块上运行gulp任务,通过gulp-submodule依次拥有自己的依赖项,失败
- Dynogels:使用OR比较的查询
- Node.js Body-Parser无法检索表单input
- 节点/请求错误:“处理POST请求:无内容types”
- babel编译器导出未定义和实际导出在一起
- npm –version给出errormodule.js:538抛出错误; ^错误:找不到模块