作为我学习Node内部的一部分,我试图在Node响应原型中添加一些基本功能,而不需要一些外部库。它不应该是一项艰巨的任务,但是,响应永远不会传递给新函数,永远不能通过 this 语句检索。这是将模板呈现函数绑定到服务器响应的示例。
const http = require('http');
const newMethods = Object.create(http.ServerResponse.prototype);
newMethods.render = async (view, data) => {
const renderResult = await aTemplateLibray(view, data);
this.writeHead(200, {'Content-Type': 'text/html'});
this.end(renderResult);
}
// Other methods here...
// Then
Object.assign(http.ServerResponse.prototype, newMethods);
module.exports = http;
一旦我使用这个http服务器,我可以使用新的渲染功能,但响应没有传递给它,所以会抛出一条错误信息,比如 this.writeHead不是函数
我也尝试使用Object.defineProperty方法。
Object.defineProperty(http.ServerResponse.prototype, 'render',
{writable: true,
enumerable: true,
get: return this.socket.parser.incoming
});
我发现一些旧库使用旧的 __ defineGetter __ 方法返回该套接字,我使用新表单对其进行测试,但它也无法正常工作。
答案 0 :(得分:0)
主要问题是你使用箭头函数表达式(=>
),它对this
指向函数内部的内容有特殊影响(更多关于here)
在您的情况下,您想使用async function(...)
:
newMethods.render = async function(view, data) {
const renderResult = await aTemplateLibray(view, data);
this.writeHead(200, {'Content-Type': 'text/html'});
this.end(renderResult);
}