This is the most robust documentation I can find for the process.env
property: https://nodejs.org/api/process.html#process_process_env.
在我的机器(Windows/Bash)上,当我打印process.env
的内容时,我看到的是USERNAME
(我的Windows用户名),而不是USER
。同样,echo $USERNAME
显示我的名字,但echo $USER
什么也不返回。USER
和USERNAME
之间有什么区别?是操作系统的问题吗?它们可以互换吗?
3条答案
按热度按时间vngu2lb81#
您链接到的关于
process.env
的文档显示了一个 * 示例 * 环境;process.env
基本上可以是任何值--它的值通常具有shell提供的OS默认值,但最终它们由用户和/或启动您的进程的进程控制。即用户可以运行
...并且
process.env
不会包含真实的的用户名。如果您对获取进程运行时所使用的用户的信息感兴趣,请调用
os.userInfo()
,它(大多数情况下1)跨平台一致。1 -在Windows上,
uid
、gid
和shell
无用,如上所示os.userInfo()
调用uv_os_get_passwd
,uv_os_get_passwd
返回实际的当前有效用户,而不考虑环境变量中的内容。**
uv_os_get_passwd
**获取当前有效uid(不是真实的uid)的口令文件条目的子集。填充的数据包括用户名、euid、gid、shell和主目录。在非Windows系统上,所有数据都来自getpwuid_r(3)。在Windows上,uid和gid设置为-1,没有任何意义,shell为 NULL。jexiocij2#
process.env
是进程的environment variables,由OS提供给进程。这个对象实际上可以包含任何东西,如操作系统和启动它的进程所指定的,但默认情况下,Windows将用户名存储在
USERNAME
中,而类Unix系统(Linux、macOS等)将其存储在USER
中。ou6hu8tu3#
我在尝试通过dotenv连接node.js和mysql时遇到了类似的问题。
网上的众多答案都没有解决我的问题。
这个方法运行得非常好,没有.env文件,但只在app.js文件中插入了身份验证所需的信息。我尝试了所有发布的答案,但都没有成功,其中包括(但不仅仅是):
1.将.env文件中的信息更改为带和不带“”
1.更改.env文件的名称
1.更改.env文件的路径
1.描述.env文件的路径
1.在app.js中编写dotenv命令的不同变体
最后,我试着用npm install dotenv命令检查我是否安装了dotenv,并且试着从console.log(dotenv.MY_ENV_VAR)中显示dotenv的版本;其再次显示未定义。
这个问题与dotenv混淆了USER(系统的,就像你一样,我使用的是Linux)和USERNAME(mysql数据库的)有关。实际上USER返回的是当前系统用户,而不是mysql数据库用户,为了方便起见,我在.env文件中将其设置为USERNAME。现在它可以连接到数据库了!
要对此进行检查,您可以用途:
第一个月
以及:
console.log(process.env.USERNAME);
第一个提供系统用户,而第二个提供数据库用户。
实际上,可以使用保存mysql数据库用户名的变量的任何名称,只要它不与Linux中系统用户名的保留名称
USER
匹配。