我想在 superagent 的主要功能中添加一些额外的逻辑(日志记录、跟踪内容):https ://github.com/visionmedia/superagent/blob/master/lib/client.js#L444
所以我需要扩展超级代理,并希望提供相同的 API,通过所有功能。我试图通过不同的机制来解决它:Object.create、原型、深拷贝,但我没有让它工作。
我不想操纵 superagent 的源代码,只需要它并包装它,添加我的额外逻辑并调用,通过 origin 函数。我认为这是面向方面的。
// 编辑所以对我不起作用的是绕过请求构造函数:
function Request(method, url) {
var self = this;
Emitter.call(this);
this._query = this._query || [];
this.method = method;
this.url = url;
this.header = {};
this._header = {};
this.on('end', function(){
try {
var res = new Response(self);
if ('HEAD' == method) res.text = null;
self.callback(null, res);
} catch(e) {
var err = new Error('Parser is unable to parse the response');
err.parse = true;
err.original = e;
self.callback(err);
}
});
}