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

Windows10下Node.js中process.env.USERNAME读取主机名而非自定义变量的问题

问题解答

一、USERNAME/username读取到主机名的原因

没错,这就是系统环境变量冲突导致的。Windows系统默认自带USERNAME环境变量,存储的是当前登录的用户名(你看到的“主机名”其实是当前登录账户的名称)。而且Windows的环境变量是大小写不敏感的,不管你写USERNAME还是username,都会指向系统自带的这个变量。

哪怕你在dotenv配置里加了override: true,也没法覆盖Windows的系统级环境变量——因为这些系统变量在Node.js进程启动时就已经被加载到process.env中,优先级高于你自定义的.env变量。而USER_NAME这种带下划线的命名,系统没有内置同名变量,所以能正常读取你设置的值。

二、Node.js中定义用户名、密码的规范做法

  • 加项目专属前缀:给自定义环境变量加上项目独有的前缀,比如MYAPP_DB_USER、MYAPP_DB_PASS,从根源上避免和系统环境变量重名。
  • 遵循全大写+下划线命名:环境变量的通用惯例是全大写,单词之间用下划线分隔,比如API_USERNAME、API_PASSWORD,可读性更强,也符合大多数项目的规范。
  • 严格保护敏感信息:一定要把.env文件加入.gitignore,绝对不能把包含密码、密钥的配置文件提交到代码仓库。
  • 区分环境配置:针对开发、测试、生产环境分别创建.env.development、.env.production等文件,用dotenv-flow这类工具自动加载对应环境的配置。

你的代码示例

app.js

const express = require('express')
const app = express();

const dotenv = require('dotenv')

// 设置服务器端口
dotenv.config({
    path: './utils/config.env',
    override: true
})

console.log(`*** Username: ${process.env.USERNAME}`)
console.log(`*** Username: ${process.env.USER_NAME}`)
console.log(`*** Username: ${process.env.UNAME}`)
console.log(`*** Password: ${process.env.password}`)

const PORT = process.env.PORT;
app.listen(PORT, () => {
    console.log(`Server has started on port: ${process.env.PORT} in ${process.env.NODE_ENV} mode.`)
})

config.env

PORT = 3000
NODE_ENV = development

USERNAME = USERNAME1
USER_NAME = USERNAME2
UNAME = USERNAME3
password = password@123

内容的提问来源于stack exchange,提问作者elysium

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:21:33