Javascript express 4.x将http重定向到https
我有以下代码:Javascript express 4.x将http重定向到https,javascript,node.js,http,redirect,express,Javascript,Node.js,Http,Redirect,Express,我有以下代码: var https = require('https'); var http = require('http'); var express = require('express'); var app = express(); var router = express.Router(); app.use('/', router); //have 'server' listen for https var se
var https = require('https');
var http = require('http');
var express = require('express');
var app = express();
var router = express.Router();
app.use('/', router);
//have 'server' listen for https
var server = https.createServer(config.sslCredential, app);
server.listen(config.serverPort);
//listen server on http, and always redirect to https
var httpServer = http.createServer(function(req,res){
res.redirect(config.serverDomain+req.url);
});
httpServer.listen(config.httpServerPort);
但不知何故,我无法将https请求重定向到https请求,在使用express 4.x的node.js上如何正确执行此操作?引用中间件解决方案(顺便说一句,express 3.0上的是哪个中间件)
作为任何使用Heroku的人的参考,
req.secure
将不起作用。请参见此处的答案:req.host
(express 3.x)现在是req.hostname
(express 4.x)Elastic Beanstalk或ELB后面的任何其他EC2实例也是如此,其中ELB代表服务器终止HTTPS。从2017年5月起,w/express v 4.8.0:函数ensureSecure(req,res,next){if(req.headers){['x-forwarded-proto']=='https'){//OK,continue return next()};res.redirect('https://'+req.headers.host)}
@PhilAndrews使用req.headers['x-forwarded-proto']的解决方案只有在express服务器位于注入报头x-forwarded-proto的负载平衡器后面时才有效
app.all('*', ensureSecure); // at top of routing calls
http.createServer(app).listen(80)
https.createServer(sslOptions, app).listen(443)
function ensureSecure(req, res, next){
if(req.secure){
// OK, continue
return next();
};
// handle port numbers if you need non defaults
// res.redirect('https://' + req.host + req.url); // express 3.x
res.redirect('https://' + req.hostname + req.url); // express 4.x
}