扩展nodejs请求对象

如何扩展node.js请求对象并向其添加自定义方法和属性? 我需要能够从节点的请求访问this ,虽然因为我需要的URL等。

传递给http.createServercallback的请求对象是一个http.IncomingMessage对象。 为了增加请求对象,你可以添加方法到http.IncomingMessage.prototype

 var http = require('http'); http.IncomingMessage.prototype.userAgent = function () { return this.headers['user-agent']; } 

要添加访问者属性:

 Object.defineProperty(http.IncomingMessage.prototype, 'userAgent', { get: function () { return this.headers['user-agent']; } } 

如果您的现有对象在构造函数体中定义了其方法,则可以使用delegation:

 function AugmentedRequest() { this.userAgent = function () {} } AugmentedRequest.call(request); //request now has a userAgent method 

另一种不涉及增加request对象的方法是使用合成。

 var extendedRequest = { get userAgent() { this.request.headers['user-agent']; } } createServerCallback(function (req, res) { var request = Object.create(extendedRequest); request.request = req; }); 

这种技术在koa中被广泛用来包装Node对象。