引入

开发、测试和生产环境通常使用不同的端口、数据库地址和日志级别。把这些值硬编码在源码中,会增加切换环境的成本,也可能把密钥提交到版本库。Node.js 可以通过进程环境变量读取运行时配置。

正文

读取环境变量

const port = Number(process.env.PORT || 3000);
const nodeEnv = process.env.NODE_ENV || 'development';
 
console.log(`environment=${nodeEnv}, port=${port}`);

启动时传入变量:

NODE_ENV=production PORT=8080 node src/index.js

Windows PowerShell 可以使用:

$env:NODE_ENV="production"; $env:PORT="8080"; node src/index.js

所有环境变量最初都是字符串,端口、布尔值和列表需要显式转换和校验。

配置原则

  • 必填配置缺失时尽早失败,不要静默使用危险默认值。
  • 密钥、Token 和生产凭据不要写入源码或提交到 Git。
  • 可以提供 .env.example 说明需要哪些变量,真实 .envGitignore 忽略。
  • 开发和生产使用一致的配置读取方式,避免部署后行为改变。

调试与日志

node --inspect src/index.js
node --inspect-brk src/index.js

可以在 Chrome DevTools 或编辑器中连接调试器,设置断点、查看调用栈和变量。临时排查可以使用 console.error,生产服务应使用带级别、请求标识和敏感信息脱敏的日志方案。

优雅退出

process.on('SIGTERM', () => {
  server.close(() => {
    process.exit(0);
  });
});

收到停止信号后,应停止接收新请求、完成必要清理,再退出进程。不要用 process.exit() 作为所有错误的通用处理方式,否则可能截断日志或未完成的 I/O。

引出

环境变量适合运行时配置,但不适合替代完整的配置管理和秘密管理系统。上线前应检查变量来源、权限、日志脱敏和进程重启后的恢复行为。