内容简介:翻译自:https://stackoverflow.com/questions/13186134/node-js-express-and-heroku-how-to-handle-http-and-https
我有一个应用程序是非常正常的Express应用程序 – 简单的服务器逻辑,视图,许多客户端JS.
我必须做很多 AJAX请求.其中一些需要通过HTTPS协议进行保护(有些不需要).
所以,我的服务器应该同时使用HTTP和HTTPS.
它也适用于本地机器(通常使用nodemon运行)和Heroku.
据我所知,Heroku为您提供了一个可以监听的单个端口(process.env.PORT),并通过代理处理所有请求(因此,您的应用程序正在侦听此端口并且不会打扰原型 – 对吗? )
那么,我是否正确 – 我应该为开发机器和Heroku提供一些不同的代码?
喜欢
... app = express() ... if process.env.NODE_ENV == 'production' app.listen(process.env.PORT) else https = require('https') http = require('http') http.createServer(app).listen(5080) # some local port options = { key: fs.readFileSync('key.pem'), cert: fs.readFileSync('cert.pem') # my self-signed files } https.createServer(options, app).listen(5443) # some different local port
这是处理这个问题的正确方法吗?
var express = require('express'); var http = require('http'); var https = require('https'); var fs = require('fs'); var privateKey = fs.readFileSync('./config/localhost.key').toString(); var certificate = fs.readFileSync('./config/localhost.crt').toString(); var options = { key : privateKey , cert : certificate } var app = express(); // Start server. var port = process.env.PORT || 3000; // Used by Heroku and http on localhost process.env['PORT'] = process.env.PORT || 4000; // Used by https on localhost http.createServer(app).listen(port, function () { console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env); }); // Run separate https server if on localhost if (process.env.NODE_ENV != 'production') { https.createServer(options, app).listen(process.env.PORT, function () { console.log("Express server listening with https on port %d in %s mode", this.address().port, app.settings.env); }); }; if (process.env.NODE_ENV == 'production') { app.use(function (req, res, next) { res.setHeader('Strict-Transport-Security', 'max-age=8640000; includeSubDomains'); if (req.headers['x-forwarded-proto'] && req.headers['x-forwarded-proto'] === "http") { return res.redirect(301, 'https://' + req.host + req.url); } else { return next(); } }); } else { app.use(function (req, res, next) { res.setHeader('Strict-Transport-Security', 'max-age=8640000; includeSubDomains'); if (!req.secure) { return res.redirect(301, 'https://' + req.host + ":" + process.env.PORT + req.url); } else { return next(); } }); };
翻译自:https://stackoverflow.com/questions/13186134/node-js-express-and-heroku-how-to-handle-http-and-https
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
How to Build a Billion Dollar App
George Berkowski / Little, Brown Book Group / 2015-4-1 / USD 24.95
Apps have changed the way we communicate, shop, play, interact and travel and their phenomenal popularity has presented possibly the biggest business opportunity in history. In How to Build a Billi......一起来看看 《How to Build a Billion Dollar App》 这本书的介绍吧!