尽管调用文件相同,为什么会出现连接错误?

时间:2017-12-26 21:41:32

标签: javascript node.js environment-variables

我的问题如下,我正在运行一个我在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.jscd node; node RunServer.js都运行完全相同的事情。对此有解释吗?

1 个答案:

答案 0 :(得分:1)

似乎dotenv.config({path:...})中指定的路径相对于当前工作目录(cwd)被解析。因此,如果节点在不同的目录上运行,结果将会不同。