本文介绍了侦听单个 Express 应用程序的 HTTP 和 HTTPS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我可以创建一个同时监听 HTTP 和 HTTPS 的 Express 服务器,使用相同的路由和相同的中间件吗?
目前我在 HTTP 上使用 Express 执行此操作,stunnel 将 HTTPS 隧道传输到 Express,但我更喜欢纯 Node 解决方案.
我可以用这段代码来做,但使用标记为私有的handle
方法:
var express = require('express'), https = require("https"), fs = require('fs');var app = express.createServer();//初始化路由和中间件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(选项,功能(请求,资源){app.handle( req, res );} ).听(443);
解决方案
您可以通过以下方式共享实现:
var register = function (app) {//配置中间件应用程序配置({});//配置路由app.get(...);};var http = express.createServer();注册(http);http.listen(80);var https = express.createServer({ key:/* https 属性 */});注册(https);https.listen(443);
Can I create an Express server listening on both HTTP and HTTPS, with the same routes and the same middlewares?
Currently I do this with Express on HTTP, with stunnel tunneling HTTPS to Express, but I prefer a pure Node solution.
I can do it with this code, but using the handle
method that is marked as private:
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 );
解决方案
You can share the implementation via something like:
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);
这篇关于侦听单个 Express 应用程序的 HTTP 和 HTTPS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!