当通过环境variables设置端口时,redirect循环在forcedomain(node.js,express)
我在使用express框架的node.js应用程序中使用forcedomain中间件来redirect到默认域。
当我明确指定端口在forcedomain设置,它运作良好,例如在一个简单的'你好世界'的应用程序:
var express = require('express') var app = express() var forceDomain = require('forcedomain') app.use(forceDomain({ hostname:'example.com', port:3000 })) app.get('/', function (req, res) { res.send('Hello World') }) app.listen(3000)
但是后来我决定通过环境设置所有可configuration的variables(例如,在开发或生产模式下有不同的端口)。 所以我改变了上面引用的代码 – 用process.env.PORT
replace了3000:
... app.use(forceDomain({ hostname:'example.com', port:process.env.PORT })) ... app.listen(process.env.PORT)
并运行该应用程序如下
$ PORT=3000 node app.js
但是这一次,如果我在浏览器中inputhttp://example.com:3000
,就会出现一个redirect循环错误:“这个网页有一个redirect循环(ERR_TOO_MANY_REDIRECTS)”
我试图使用dotenv包从.env文件加载环境variables,并在我的应用程序的开始处添加了以下内容:
require('dotenv').load()
但结果是相同的 – redirect循环。
它看起来像app.listen
从process.env.PORT
得到适当的值,而forcedomain不,并且以默认端口设置(80)开始。
所以这个问题对我来说还是开放的:如何通过env。 variables为forcedomain设置?
UPDATE1
版本新鲜:
$ node -v v0.12.2 $ cat package.json { "name": "forcedomain-test", "version": "0.0.1", "devDependencies": {}, "dependencies": { "dotenv": "^1.2.0", "express": "^4.13.0", "forcedomain": "^0.4.0" } }
尝试这个:
app.use(forceDomain({ hostname : 'example.com', port : Number(process.env.PORT) }))
forceDomain
与正在使用的端口号(它首先变成数字)和选项中设置的端口(因为它来自环境variables,是一个string)进行严格匹配。
由于string和数字在执行严格的相等性检查时不匹配,因此forceDomain
认为它必须发出redirect。