Node.js是否公开了每个HTTP请求的环境变量?

时间:2015-08-03 16:28:44

标签: node.js environment-variables passenger

在Apache上通过Passenger 5.0.15使用Node.js,我正在寻找一种方法来检索Node.js http.IncomingMessage object内的每个HTTP请求环境变量或任何替代方案。

每个请求环境变量的一个例子是Apache mod_rewrite设置的一个例子。这不是一个真实的例子,我知道任何与路径相关的细节都可以在Node应用程序中轻松检索。 Apache模块可以为请求 1

设置环境变量
# Apache sets an environment variable for this HTTP request
RewriteRule path/([^/]+) - [E=pathvar:$1]

在Ruby的Rack中,the input environment is passed to request.env。在PHP中,它被传递到$_SERVER["pathvar"]

Passenger确实试图设置它们,但这样做有点不正确by setting them for the entire Node.js process,与它们设置的HTTP请求无关。这可能会在Passenger中得到修复或更改,但无法帮助我找到每个请求变量。

console.log(process.env.pathvar);
// Has the value, but has been set for the entire Node.js process
// Subsequent requests retain the SAME value due to Passenger's current implementation

// Environment variables aren't present 
// in the http server request object
var s = http.createServer(function(request, response) {
    // undefined, which makes sense because they're not headers
    console.log(request.headers.pathvar);
});
  • 每个HTTP请求环境变量甚至可以作为Node.js中的一个概念,因此Passenger可以正确设置它们吗?
  • 如果他们这样做,是否得到http模块的支持,我该如何检索它们?
  • 如果不是http模块,是否有支持它们的中间件? (我没有提到环境变量among Connect's middleware collection

1 我们试图解决的真实用例是检索Shibboleth用户身份验证属性,由Apache mod_shib设置为环境变量,类似于mod_rewrite在调用Node.js应用程序之前如何设置它们。事实上,这是首先涉及Apache + Passenger的原因。 Shibboleth配置中有一个可用但不合需要的解决方法,即将用户属性作为HTTP标头发送。 Node.js还有其他SAML模块,但是当前的基础设施已经依赖于Apache mod_shib。

0 个答案:

没有答案