扩展nodejs请求对象
如何扩展node.js请求对象并向其添加自定义方法和属性? 我需要能够从节点的请求访问this
,虽然因为我需要的URL等。
传递给http.createServer
callback的请求对象是一个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对象。