无法在 sailsJS 中修改请求 object 的协议选项

Can't modify protocol option of request object in sailsJS

我正在使用检查 req.secure 选项的库以继续而不会出现错误。但我的应用程序也部署到 heroku,我正在使用自定义中间件检查 "x-forwarded-proto" header 并将 req.secure 设置为 true 并将 req.protocol 设置为 "https",但是实际上,这些选项在此类操作后保持不变。我在为 req.secure 和 req.protocol 赋值后立即进行了调试输出,我可以看到这些选项没有被修改。它肯定会通过该代码,因为我看到 "x-forwarded-proto" == "https" 案例的调试信息。在 express js 中设置这样的变量有什么限制吗?

SailsJS v0.10.5

我的自定义中间件代码在config/http.js:

if (req.headers['x-forwarded-proto'] === 'https'){
          req.secure = true;
          req.protocol = 'https';

          sails.log('Secure headers detected: secure - ', req.secure, ', protocol - ', req.protocol);
}

输出:

debug: Secure headers detected: secure - false , protocol - http

其实我找到了这种行为的原因。在 expressJS 中定义的请求对象 req 具有 protocolsecure 等属性,这些属性已定义使用 __defineGetter__ 函数。此函数是 V8 的特性,它设置在记录对象中不可见的值并且 不可设置,仅在您将定义的情况下setter 具有 __defineSetter__ 功能。

可在此处找到更多信息:https://github.com/joyent/node/wiki/ecma-5-mozilla-features-implemented-in-v8#objectprototype