29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
import "dotenv/config";
|
|
import { z } from "zod";
|
|
|
|
// 所有运行时配置都从环境变量读取,并在启动时一次性校验。
|
|
// 这样数据库密码、端口等配置错误会在服务启动阶段暴露,而不是等到请求进来才失败。
|
|
const envSchema = z.object({
|
|
NODE_ENV: z.enum(["development", "test", "production"]).default("development"),
|
|
PORT: z.coerce.number().int().positive().default(3000),
|
|
|
|
DB_HOST: z.string().min(1),
|
|
DB_PORT: z.coerce.number().int().positive().default(3306),
|
|
DB_USER: z.string().min(1),
|
|
DB_PASSWORD: z.string().min(1),
|
|
DB_NAME: z.string().min(1),
|
|
DB_CONNECTION_LIMIT: z.coerce.number().int().positive().default(10)
|
|
});
|
|
|
|
const result = envSchema.safeParse(process.env);
|
|
|
|
if (!result.success) {
|
|
// 这里直接退出进程,因为配置错误属于“服务无法安全启动”的问题。
|
|
console.error("环境变量配置错误,请对照 .env.development 检查:");
|
|
console.error(z.treeifyError(result.error));
|
|
process.exit(1);
|
|
}
|
|
|
|
// 其他模块只从 env 读取已校验过的值,不再直接访问 process.env。
|
|
export const env = result.data;
|