You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:47:33