当通过环境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.PORTreplace了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.listenprocess.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。