节点/快速 - 始终在URL前面添加https

时间:2017-07-20 18:31:25

标签: javascript node.js express heroku https

我有一个在Heroku上运行的应用程序,我正在尝试确保URL始终具有https://,即使用户没有提供它也是如此。

使用以下配置,当用户在URL上提供http://example.com时,我可以将其替换为http:// for https://。但是当用户没有提供http://(当他只提供example.com时)时仍然无效:

var express = require('express');
var path = require('path');
var serveStatic = require('serve-static');

var forceSsl = function (req, res, next) {
  if (req.headers['x-forwarded-proto'] !== 'https') {
    return res.redirect(['https://', req.get('Host'), req.url].join(''));
  }
  return next();
};

app = express();
app.use(serveStatic(__dirname));

if(process.env.NODE_ENV === 'production') {
  app.use(forceSsl);
}

var port = process.env.PORT || 5000;
app.listen(port);

app.all('/*', function(req, res) {
  res.sendfile('index.html');
});

console.log('server started '+ port);

我怎么能实现这个目标?

修改

我没有配置SSL的问题。当用户在URL上提供http://或https://前缀时,它工作正常。问题是当用户不提供此前缀时。在这种情况下,浏览器不会自动添加http:// both https://,然后SSL不适用。

1 个答案:

答案 0 :(得分:0)

This是专门为heroku上的节点制作的实用程序,用于将流量重定向到https。