我可以使用相同的路由和相同的中间件创建一个同时监听 HTTP 和 HTTPS 的 Express 服务器吗?
目前我在 HTTP 上使用 Express 执行此操作,使用 stunnel隧道 HTTPS 到 Express,但我更喜欢纯 Node 解决方案。
我可以用这段代码做到这一点,但使用标记为私有(private)的 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 );
最佳答案
要使您的应用能够分别在端口 80
和 443
上监听 http
和 https
,请执行以下操作以下
创建一个 express 应用:
var express = require('express');
var app = express();
express()
返回的应用是一个 JavaScript 函数。它可以作为回调传递给 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'),
ca: fs.readFileSync('/path/to/ca.pem')
};
http.createServer(app).listen(80);
https.createServer(options, app).listen(443);
有关完整的详细信息,请参阅 doc
关于javascript - 监听单个快速应用程序的 HTTP 和 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8355473/