From 2e2f053474e1721079cb0665eccc9d998b1c40d5 Mon Sep 17 00:00:00 2001 From: biss Date: Mon, 20 Jul 2026 16:44:49 +0800 Subject: [PATCH] ENV --- README.md | 4 ++-- server.mjs | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d623bef..ec1bb5d 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ npm start ## 数据库配置 -应用根据 `DATABASE_CLIENT` 使用不同数据库。未设置时,开发/测试环境默认 `sqlite`,`NODE_ENV=production` 默认 `mysql`。 +应用启动时会自动读取项目根目录的 `.env`,可先运行 `Copy-Item .env.example .env` 创建配置文件。命令行或部署平台已经注入的进程环境变量优先于 `.env`。应用根据 `DATABASE_CLIENT` 使用不同数据库;未设置时,开发/测试环境默认 `sqlite`,`NODE_ENV=production` 默认 `mysql`。 ### 本地 SQLite @@ -139,7 +139,7 @@ $env:HOST = '0.0.0.0' npm start ``` -也可以只设置标准连接地址 `DATABASE_URL=mysql://user:password@host:3306/database`。完整模板见 `.env.example`;项目不会自动加载 `.env` 文件,部署平台应将这些值作为进程环境变量注入。 +也可以只设置标准连接地址 `DATABASE_URL=mysql://user:password@host:3306/database`。完整模板见 `.env.example`;将模板复制为 `.env` 后取消 MySQL 配置项的注释并填写实际连接信息即可。生产部署仍建议由部署平台注入环境变量,避免在服务器文件中保存密码。 ## 演示账号 diff --git a/server.mjs b/server.mjs index c51643b..a17f4fd 100644 --- a/server.mjs +++ b/server.mjs @@ -1,6 +1,8 @@ import { createServer } from 'node:http'; +import { existsSync } from 'node:fs'; import { readFile } from 'node:fs/promises'; import { extname, join, normalize, resolve } from 'node:path'; +import { loadEnvFile } from 'node:process'; import { randomBytes, pbkdf2Sync, timingSafeEqual } from 'node:crypto'; import { createDatabase } from './database.mjs'; import { buildCenterMaterialsWorkbook, buildWorkbook, hasExcelResource, parseWorkbook } from './excel.mjs'; @@ -15,6 +17,9 @@ import { createSeedDatabase } from './src/data/seed.mjs'; import { resolveRegion } from './src/data/region-service.mjs'; const root = resolve(process.cwd()); +const envPath = join(root, '.env'); +if (existsSync(envPath)) loadEnvFile(envPath); + const port = Number(process.env.PORT || 4173); const host = process.env.HOST || '127.0.0.1'; const sessions = new Map();