我的问题如下,我正在运行一个我在Node.js中编写的WebSocket服务器,并且运行在主要使用Laravel构建的环境中。为了像Laravel一样使用.env
文件我正在使用dotenv
包。
我注意到一些我觉得非常奇怪的东西。但在我解释之前,让我给你一个典型的Laravel快速文件夹结构,添加我的节点:
htdocs
- app
- node
- RunServer.js
- db.js
....
- resources
....
我的观察
当我在htdocs
文件夹中并运行node node/RunServer.js
时,出现以下错误:
/var/www/html/bigriss/node/db.js:16
if (err) throw err;
^
Error: connect ECONNREFUSED 127.0.1.1:3306
....
虽然cd node; node RunServer.js
没有出错,但服务器开始按预期运行。 db.js文件如下所示:
var mysql = require('mysql');
require('dotenv').config({path: '../.env'});
mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
port: process.env.DB_PORT,
database: process.env.DB_DATABASE
}).connect(function(err) {
if (err) throw err;
});
显然这个问题与dotenv
有关,但我不确定为什么文件中的路径会发生变化(给我不同的process.env输出),即使node node/RunServer.js
和cd node; node RunServer.js
都运行完全相同的事情。对此有解释吗?
答案 0 :(得分:1)
似乎dotenv.config({path:...})中指定的路径相对于当前工作目录(cwd)被解析。因此,如果节点在不同的目录上运行,结果将会不同。