我试图让我的Express应用程序在用户使用HTTP访问站点时将其重定向到HTTPS。我看了这个问题:
Automatic HTTPS connection/redirect with node.js/express
但是它并没有我一直在寻找的答案。我正在使用httpolyglot:
https://github.com/mscdex/httpolyglot
因为我只想在一个端口上执行此操作,并且httpolyglot的性能与广告中所宣传的一样,但是我无法使重定向工作。这是我的代码:
var express = require('express');
var https = require('https')
var gulp = require('gulp');
var fs = require('fs');
var httpolyglot = require('httpolyglot');
var app = express();
require('./gulpfile');
gulp.start('config');
const options = {
key: fs.readFileSync("/path/to/key.key"),
cert: fs.readFileSync("/path/to/cert.cer")
};
app.use(express.static(__dirname));
app.use(function(req, res) {
if (!req.socket.encrypted) {
res.writeHead(301, {'Location': 'https://' + req.host + req.url});
return res.end()
}
});
app.get('/landing', function(req, res) {
res.sendFile(__dirname + '/landing.html');
});
// Defer all other routes to the angular app
app.use(function(req, res) {
res.sendFile(__dirname + '/index.html');
});
httpolyglot.createServer(options, app).listen(3004);
答案 0 :(得分:0)
弄清楚了。我的app.use函数位于某些Express中间件之后的代码中,该中间件没有调用next(),因此没有被调用。