一尘不染

在单个Express应用程序上侦听HTTP和HTTPS

node.js

是否可以创建具有相同路由和相同中间件的,同时侦听HTTP和HTTPS的Express服务器?

目前,我在高速上的HTTP做到这一点,有安全通道隧道HTTPS来表达,但我更喜欢一个纯粹的节点解决方案。

我可以使用以下代码来做到这一点,但是可以使用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 );

阅读 185

收藏
2020-07-07

共1个答案

一尘不染

您可以通过以下方式共享实现:

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);
2020-07-07