无法在 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 具有 protocol
和 secure
等属性,这些属性已定义使用 __defineGetter__
函数。此函数是 V8 的特性,它设置在记录对象中不可见的值并且 不可设置,仅在您将定义的情况下setter 具有 __defineSetter__
功能。
可在此处找到更多信息:https://github.com/joyent/node/wiki/ecma-5-mozilla-features-implemented-in-v8#objectprototype
我正在使用检查 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 具有 protocol
和 secure
等属性,这些属性已定义使用 __defineGetter__
函数。此函数是 V8 的特性,它设置在记录对象中不可见的值并且 不可设置,仅在您将定义的情况下setter 具有 __defineSetter__
功能。
可在此处找到更多信息:https://github.com/joyent/node/wiki/ecma-5-mozilla-features-implemented-in-v8#objectprototype