如何在Express启动阶段检测应用是否配置HTTPS(前后端通用)
跨环境(Node/浏览器)检测HTTPS状态的需求与优化
问题背景
已掌握Express API的HTTPS配置方法,但由于代码同时运行在客户端和服务端,需要实现全局变量检测(如Is_Node、Is_HTTPS)。最初尝试用location.protocol检测HTTPS状态,但在Node环境中因location未定义而失败。计划通过Is_Node区分检测逻辑,避免使用location,但尚未找到在Node启动阶段(非请求过程,无法使用req相关属性)检测HTTP/HTTPS的合适方法。
理想状态下,不想在app.js中手动设置布尔值,希望全局检测逻辑能独立于服务端/客户端配置返回结果。
Express HTTP/HTTPS服务器配置代码
HTTPS配置:
var https = require('https') var options = { key: fs.readFileSync('/app/ssl/key.key'), cert: fs.readFileSync('/app/ssl/crt.crt'), }; var port = 3000 app.set('port', port); var server = https.createServer(options, app);
HTTP配置:
var http = require('http'); var port = 3000 app.set('port', port); var server = http.createServer(app);
当前进展与待优化点
已实现部分全局检测代码,但不确定后续操作:
var app = module.exports.app var server = module.exports.server
更新:接近解决但仍有硬编码问题
目前方案需要硬编码端口,希望能自动获取Express端口而非手动指定,同时欢迎更优解决方案:
function getGlobal() { return typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : undefined; } var g = getGlobal(); var FUNCS = {}; g.FUNCS = FUNCS; FUNCS.Dev_Bools = {}; if (typeof window === "undefined") { FUNCS.Dev_Bools.Is_NodeJS_Mode = true; } else { FUNCS.Dev_Bools.Is_NodeJS_Mode = false; var module = {}; g.module = module; } if (FUNCS.Dev_Bools.Is_NodeJS_Mode == true) { var port = 3000; var https = require("https"); var options = { host: "localhost", port: port, path: "/", method: "GET", rejectUnauthorized: false, //Set to false to pass w/ bad SSL certs requestCert: true, agent: false, }; var request = https.request(options, function (req) { FUNCS.Dev_Bools.HTTPS_Mode = true; console.log("FUNCS.Dev_Bools.HTTPS_Mode:" + FUNCS.Dev_Bools.HTTPS_Mode); }); request.on("error", function (err) { FUNCS.Dev_Bools.HTTPS_Mode = false; console.log("FUNCS.Dev_Bools.HTTPS_Mode:" + FUNCS.Dev_Bools.HTTPS_Mode); }); request.end(); } else { if (location.protocol === "https:") { FUNCS.Dev_Bools.HTTPS_Mode = true; } else { FUNCS.Dev_Bools.HTTPS_Mode = false; } }
内容的提问来源于stack exchange,提问作者FreeSoftwareServers
相关产品推荐
相关产品推荐

