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

标签 javascript node.js https express

我可以使用相同的路由和相同的中间件创建一个同时监听 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 );

最佳答案

要使您的应用能够分别在端口 80443 上监听 httphttps,请执行以下操作以下

创建一个 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/

相关文章:

python - 使用 HTTPS 提供安全的 Django 页面

javascript - 401 状态处理,带访问和刷新 Token React, Node

javascript - 是否有基于浏览器的 Websocket 监听器实现?

javascript - 将鼠标悬停在拉斐尔圆上时显示文本

javascript - 将图像数据设置到输入文件标签中

node.js - Nominatim 为同一请求检索不同的数据

Ruby Mechanize https 错误

spring - 使用 Spring Security 的 HTTPS 登录重定向到 HTTP

javascript - 显示 0 条数据表

javascript - 当img标签进入js对象时如何从javascript中的图像中提取src