我的目标是在流星项目中拦截来自我的服务器的每个外发消息并添加一些内容(元数据和其他内容)
我有这个简单的代码:
var http = Npm.require( 'http' ),
originalWrite = http.OutgoingMessage.prototype.write;
http.OutgoingMessage.prototype.write = function ( chunk, encoding ) {
console.log( this, arguments );
chunk = chunk.replace( 'some code', 'elements to add' );
originalWrite.call( this, chunk, encoding );
}
它有效,但我找不到当前通话的网址。这是一个问题,因为我需要根据被调用的URL添加不同的元素。
(nota:我有条件确保请求是一个html文件)
答案 0 :(得分:0)
完整的网址不是直接可用,但主机和路径是通过请求标头Host
和path
对象上的属性OutgoingMessage
。
获取完整网址:
var url = this.getHeader('host') + this.path; //or this._headers.host;
-
var originalWrite = http.OutgoingMessage.prototype.write;
http.OutgoingMessage.prototype.write = function () {
var url = this.getHeader('host') + this.path;
//...
return originalWrite.apply(this, arguments);
};
标头中path
不可用的原因是因为请求路径是Request-Line
的一部分。 OutgoingMessage
实现首先建立与主机的TCP连接,然后在路径上发出请求。
GET /path HTTP/1.1
Host: hostname