传递给http.createServer回调的请求对象是一个http.IncomingMessage对象.要扩充请求对象,可以添加方法http.IncomingMessage.prototype.
var http = require('http');
http.IncomingMessage.prototype.userAgent = function () {
return this.headers['user-agent'];
}
Run Code Online (Sandbox Code Playgroud)
要添加访问者属性:
Object.defineProperty(http.IncomingMessage.prototype, 'userAgent', {
get: function () {
return this.headers['user-agent'];
}
}
Run Code Online (Sandbox Code Playgroud)
如果现有对象在构造函数体中定义了其方法,则可以使用委托:
function AugmentedRequest() {
this.userAgent = function () {}
}
AugmentedRequest.call(request); //request now has a userAgent method
Run Code Online (Sandbox Code Playgroud)
另一种不涉及增加request对象的方法是使用组合.
var extendedRequest = {
get userAgent() {
this.request.headers['user-agent'];
}
}
createServerCallback(function (req, res) {
var request = Object.create(extendedRequest);
request.request = req;
});
Run Code Online (Sandbox Code Playgroud)
这种技术在koa中被大量用于包装Node对象.
| 归档时间: |
|
| 查看次数: |
1723 次 |
| 最近记录: |