Files
danmu_api/package.json
T
Elegy233 2d5a343036 重构server.js为纯ESM,优化esm-shim兼容层逻辑,解决node启动时日志中的警告 (#178)
* esm-shim.js:更改扩展名.js为.cjs强制开启 CommonJS模式

原因: 项目启用了 "type": "module" 后,Node.js 会默认将所有 .js 文件视为 ES Module 解析。然而,兼容层 (shim) 的核心逻辑依赖于 CommonJS 特有的 API(如 require、module._load、Module.prototype._compile)来劫持模块加载。

解决: 通过将扩展名改为 .cjs,显式告知 Node.js 即使在 ESM 项目中,该文件仍需以 CommonJS 模式 加载。这确保了它能在不破坏新架构的前提下,继续为旧版 Node.js 提供兼容性支持。

* esm-shim.cjs:重构并优化,使其更加符合项目整体规范

将原本的脚本式 Shim 重构为符合工程规范的模块,并补充了标准的 JSDoc 注释。

提取了硬编码配置为常量,提升可维护性。

使用闭包隔离了 Shim 的内部逻辑,防止污染全局作用域。

* server.js:重写为 ESM 语法

移除了不再需要的“异步启动检测”逻辑(原生 ESM 支持顶层 await,无需迂回)
API 现代化:将已废弃的 req.connection 替换为 req.socket,将 url.parse 替换为标准的 new URL()。

* package.json:声明"type": "module",正式启用原生 ESM 支持

组合解决日志中的启动警告

* server.js:更新启动提示

* README.md:更新项目结构

* server.js:修复意外的全局覆盖导致不支持流式请求,改为和原版一致的局部引用

http-util.js 里调用的 fetch 是 Node.js 18+ 自带的原生 Fetch,但是重构后不小心强制了node-fetch,实际并无需要

* tmdb-util.js:修复未捕获的Promise拒绝导致进程崩溃退出

嗯?以往怎么没崩草
node:internal/deps/undici/undici:13510
      Error.captureStackTrace(err);
            ^
DOMException [AbortError]: This operation was aborted
    at node:internal/deps/undici/undici:13510:13
    at async httpGet (file:///D:/softwares/danmu_api5.0/0/danmu_api/danmu_api/utils/http-util.js:49:24)
    at async tmdbApiGet (file:///D:/softwares/danmu_api5.0/0/danmu_api/danmu_api/utils/tmdb-util.js:22:22)
    at async searchTmdbTitles (file:///D:/softwares/danmu_api5.0/0/danmu_api/danmu_api/utils/tmdb-util.js:71:22)
    at async executeSearch (file:///D:/softwares/danmu_api5.0/0/danmu_api/danmu_api/utils/tmdb-util.js:354:24)

Node.js v22.18.0
2026-02-04 18:10:58 +08:00

21 lines
484 B
JSON

{
"name": "danmu-api-server",
"version": "1.0.0",
"type": "module",
"description": "A danmu Node.js Express API server",
"main": "danmu_api/server.js",
"scripts": {
"start": "node danmu_api/server.js",
"build-forward-widget": "node build-forward-widget.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"chokidar": "^4.0.3",
"dotenv": "^16.4.7",
"esbuild": "^0.25.10",
"https-proxy-agent": "^7.0.6",
"node-fetch": "^3.3.2"
}
}