web-dev-qa-db-ja.com

Express 4.x httpからhttpsへのリダイレクト

私は次のコードを持っています:

var https        = require('https');
var http         = require('http');
var express      = require('express');
var app          = express();
var router       = express.Router();

app.use('/', router);

//listen server on 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でこれを正しく行うにはどうすればよいですか?

18
uray

私自身の答え からのミドルウェアソリューションの引用(これはExpress 3.0にありました)

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
}
34
Plato