Javascript 函数内的配置可以';从app.js执行时找不到文件

Javascript 函数内的配置可以';从app.js执行时找不到文件,javascript,ecmascript-6,Javascript,Ecmascript 6,这是一个很难回答的问题。我正在尝试使用隧道ssh访问我的数据库。如果我独立运行函数createTunnelToMongoDB,连接工作正常。当我从app()运行它时,它返回错误没有这样的文件或目录,请在config中打开“../../id\u rsa”。我认为问题与model.exports有关。有人能给我解释一下为什么我不能这样做吗 路径:app.js (async function app() { try { // create a tunnel const tunnel

这是一个很难回答的问题。我正在尝试使用隧道ssh访问我的数据库。如果我独立运行
函数createTunnelToMongoDB
,连接工作正常。当我从
app()
运行它时,它返回错误
没有这样的文件或目录,请在config中打开“../../id\u rsa”
。我认为问题与
model.exports
有关。有人能给我解释一下为什么我不能这样做吗

路径:
app.js

(async function app() {
  try {
    // create a tunnel
    const tunnel = await createTunnelToMongoDB();
  } catch (e) {
    console.log("our error", e);
  }
})();
var config = {
  username: "root",
  privateKey: require("fs").readFileSync("../../id_rsa"),
  ...etc
};
var tnl = tunnel(config, function(error, tnl) {
  if (error) {
    console.log(error);
  }
  return tnl;
});

module.exports = tnl;
路径:
createTunnelToMongoDB.js

(async function app() {
  try {
    // create a tunnel
    const tunnel = await createTunnelToMongoDB();
  } catch (e) {
    console.log("our error", e);
  }
})();
var config = {
  username: "root",
  privateKey: require("fs").readFileSync("../../id_rsa"),
  ...etc
};
var tnl = tunnel(config, function(error, tnl) {
  if (error) {
    console.log(error);
  }
  return tnl;
});

module.exports = tnl;

readFileSync
的路径相对于工作目录。如果希望它与模块相关,则必须使用
\uuu dirname
将其连接起来,该路径指向包含模块的目录:

var fs = require("fs");
var path = require("path");

var config = {
  username: "root",
  privateKey: fs.readFileSync(path.join(__dirname, "../../id_rsa")),
  ...etc
};