Javascript 如何使用express 4.0在heroku上强制https重定向?
我不明白为什么我下面的代码不能实现这一点?有人能解释一下我哪里出了问题吗?所有http请求都应该在heroku上重定向到https,但不能在localhost上。如果有人能给我举一个这样的例子,我会非常感激。我觉得这应该是非常简单和直接的Javascript 如何使用express 4.0在heroku上强制https重定向?,javascript,node.js,heroku,express,Javascript,Node.js,Heroku,Express,我不明白为什么我下面的代码不能实现这一点?有人能解释一下我哪里出了问题吗?所有http请求都应该在heroku上重定向到https,但不能在localhost上。如果有人能给我举一个这样的例子,我会非常感激。我觉得这应该是非常简单和直接的 var app = express(); var https_redirect = function () { return function(req, res, next) { if(process.env.NODE_ENV === 'prod
var app = express();
var https_redirect = function () {
return function(req, res, next) {
if(process.env.NODE_ENV === 'production'){
if(req.headers['x-forwarded-proto'] != 'https') {
return res.redirect('https://' + req.headers.host + req.url);
} else {
return next();
}
} else {
return next();
}
};
};
app.use(https_redirect());
var server = app.listen(config.port, config.ip, function () {
});
exports = module.exports = app;
我已经做了一些搜索,看起来我所做的应该可以工作。您的中间件的
req,res,next
参数由于被外部函数包装而丢失
试试这个:
var https_redirect = function(req, res, next) {
if (process.env.NODE_ENV === 'production') {
if (req.headers['x-forwarded-proto'] != 'https') {
return res.redirect('https://' + req.headers.host + req.url);
} else {
return next();
}
} else {
return next();
}
};
app.use(https_redirect);
开源库检查
X-Forwarded-Proto
,应该与Heroku合作 非常简单,谢谢!这并不是说它会对性能产生可测量的影响,但在我看来,将If语句放在整个代码段周围,而不是添加作为生产之外的noop的中间件,会更有意义。这对我来说是可行的,但会重定向到端口80,这是行不通的。如何重定向到443?