监听单个快速应用程序的HTTP和HTTPS

我可以使用相同的路由和相同的中间件创build一个同时监听HTTP和HTTPS的Express服务器吗?

目前我在HTTP上使用Express来执行此操作,将HTTPS通道隧道传送到Express,但我更喜欢纯节点解决scheme。

我可以用这个代码做,但是使用标记为私有的handle方法:

 var express = require( 'express' ) , https = require("https") , fs = require( 'fs' ); var app = express.createServer(); // init routes and middlewares app.listen( 80 ); var privateKey = fs.readFileSync( 'privatekey.pem' ).toString(); var certificate = fs.readFileSync( 'certificate.pem' ).toString(); var options = {key: privateKey, cert: certificate}; https.createServer( options, function(req,res) { app.handle( req, res ); } ).listen( 443 ); 

       

网上收集的解决方案 "监听单个快速应用程序的HTTP和HTTPS"

你可以通过类似的方式分享实现:

 var register = function (app) { // config middleware app.configure({ }); // config routes app.get(...); }; var http = express.createServer(); register(http); http.listen(80); var https = express.createServer({ key: /* https properties */ }); register(https); https.listen(443); 

作为这个问题的一个可能的更新,你可能想看看这里的更改为快递3.更改文件说:

express()的返回值是一个JavaScript函数,封装了使快捷应用程序打勾的所有内容。 这意味着您可以通过将它传递给节点的http.createServer()https.createServer()来轻松设置应用程序的HTTP和HTTPS版本:

在Express 3中, express.createServer()现在是express()

快递3是一个完整的例子:

 var fs = require('fs') , https = require('https') , http = require('http') , express = require('express') , keys_dir = 'keys/' , server_options = { key : fs.readFileSync(keys_dir + 'privatekey.pem'), ca : fs.readFileSync(keys_dir + 'certauthority.pem'), cert : fs.readFileSync(keys_dir + 'certificate.pem') } , app = express(); app.configure(function(){ app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.session( { secret: '' } )); app.use(app.router); }); app.configure('development',function(){ app.use(express.static(__dirname + '/public')); app.use(express.errorHandler({dumpExceptions: true, showStack:true})); app.set('view options', { pretty: true }); }); app.get('/', function(req, res){ res.send('Hello World!'); }); https.createServer(server_options,app).listen(7000); http.createServer(app).listen(8000); 

要使您的应用程序分别在端口80443上侦听httphttps ,请执行以下操作

创build快速应用程序:

 var express = require('express'); var app = express(); 

express()返回的应用程序是一个JavaScript函数。 它可以作为callback传递给Node的HTTP服务器来处理请求。 这使得使用相同的代码库很容易提供您的应用程序的HTTP和HTTPS版本。

你可以这样做,如下所示:

 var express = require('express'); var https = require('https'); var http = require('http'); var fs = require('fs'); var app = express(); var options = { key: fs.readFileSync('/path/to/key.pem'), cert: fs.readFileSync('/path/to/cert.pem') }; http.createServer(app).listen(80); https.createServer(options, app).listen(443); 

有关详细信息,请参阅文档

类似的post

我可以通过httpsconfigurationexpressjs通过http和其他网页来提供服务吗?

请注意,express现在支持创buildHttps服务器:

  var app = require('express').createServer({ key: ... });