【问题标题】:What is it about this function that makes it not a function这个函数是什么使它不是函数
【发布时间】:2020-03-08 18:54:45
【问题描述】:

这是一个菜鸟问题。当我运行 app.js 时,我收到错误 createTunnelToMongoDB is not a function。我正在尝试使用tunnel-ssh 访问我的数据库。有人可以向我解释为什么我不能这样做吗?

路径:app.js

    const createTunnelToMongoDB = require("./createTunnelToMongoDB.js");

    (async function app() {
      try {
        // create a tunnel
        const tunnel = await createTunnelToMongoDB();
      } catch (e) {
        console.log("our error", e);
      }
    })();

路径:createTunnelToMongoDB.js

const tunnel = require("tunnel-ssh");
const fs = require("fs");

var config = {
  username: "root",
  privateKey: require("fs").readFileSync(path.join(__dirname, "../../id_rsa")),
  ...etc
};
var tnl = tunnel(config, function(error, tnl) {
  if (error) {
    console.log(error);
  }
  return tnl;
});

module.exports = tnl;

【问题讨论】:

  • 信息不足。 tunnel 来自createTunnelToMongoDB.js 哪里? createTunnelToMongoDB 是如何导入到app.js 中的?
  • 在这里需要更多信息。隧道是否在其他地方定义? createTunnelToMongoDB 是如何被导入的——我们在这里看不到。
  • @ThisIsNoZaku。请查看更新。
  • 表示tunnel(config, …)不返回函数。你为什么期望它?
  • 我需要它等到隧道连接发生后再进行下一步。我认为这是正确的方法。 @Bergi

标签: javascript node.js mongodb ecmascript-6 ssh-tunnel


【解决方案1】:

createTunnelToMongoDB.js 导出一个对象,调用tunnel 的结果:

var tnl = tunnel(config, function(error, tnl) {
  // ...
});

module.exports = tnl;

它不会导出函数,因此当您尝试调用它时,Node 会正确地告诉您它不是函数。

【讨论】:

    【解决方案2】:

    createTunnelToMongoDB.js 似乎没有导入到app.js

    尝试将app.js 编辑为:

    import { tnl as createTunnelToMongoDB } from "./createTunnelToMongoDB.js";
    
    (async function app() {
      try {
        // create a tunnel
        const tunnel = await createTunnelToMongoDB();
      } catch (e) {
        console.log("our error", e);
      }
    })();
    

    【讨论】:

    • 我收到错误import { tnl as createTunnelToMongoDB } from "./createTunnelToMongoDB.js"; ^ SyntaxError: Unexpected token {
    • 看起来错误是因为 EMCAScript 6 import 语法不可用。试试 ES5 语法:const createTunnelToMongoDB = require("./createTunnelToMongoDB.js").tnl;
    • 您忘记了@bp123 使用的是通用 js 而不是 ECMA 模块这一事实。 module.exports = tnl,import 语句在这里不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多