李承武

Nodejs用户环境对象:CentOS7环境配置dotenv获取.env的process.env.USER失效

一直没有单独安装使用过dotenv这个库,一般常用框架都内置集成好了,直接照着样例写.env即可。

最近因开发一个nodejs小应用踩上这个坑,在win7环境调试一切正常,换CentOS7环境出问题。。。

我的.env配置:

# env常量
HOST = 192.168.167.167
PORT = 3306
USER = wtf
PASSWORD = wtf2

在win7环境中成功连接mysql,在CentOS7服务器上一直报

Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'192.168.168.168' (using password: YES)

# 省略...

code: 'ER_ACCESS_DENIED_ERROR',
errno: 1045,
sqlMessage: "Access denied for user 'root'@'192.168.168.168' (using password: YES)",
sqlState: '28000',
fatal: true

尝试不用.env直接在源码上写mysql配置信息成功连接?!怀疑是不是dotenv读取不到配置信息,使用console.log(require('dotenv').config())打印出来的配置也是正确的

// require('dotenv').config() 返回结果
{
  parsed: {
    HOST: '192.168.167.167',
    PORT: '3306',
    USER: 'wtf',
    PASSWORD: 'wtf2'
  }
}

初想会不会是常量命名问题?可天真的我认为这个可能性很小,没有尝试继而到google、github上寻找答案。

一轮骚操作下来还是没有获取到可用信息(这问题该怎么描述关键字搜索-_-|||)

一样的配置win7能连上,CentOS7不行?系统环境问题?可打印出来信息又没错鸭?!!

一怒之下把一个个.env里的常量打印出来,结果。。。

console.log(process.env.HOST)
console.log(process.env.PORT)
console.log(process.env.USER)
console.log(process.env.PASSWORD)

// 输出结果
192.168.167.167
3306
root
wtf2

怎么process.env.USER变成root了?查process.env发现真有一个USER命名的用户环境对象,估计在CentOS7环境里dotenv是复盖不了用户环境对象导致的。。。

# 加上DB_前缀解决命名对象冲突问题
DB_HOST = 192.168.167.167
DB_PORT = 3306
DB_USER = wtf
DB_PASSWORD = wtf2

还是不能太贪图精简,乖乖学各位大佬加个前缀。。。

避坑指南

.env里常量的命名还是尽量带上阁下独特的前缀,例如:WTF_USER

enjoy life

评论