这个函数是啥使它不是函数

Posted

技术标签:

【中文标题】这个函数是啥使它不是函数【英文标题】: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 【参考方案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 语句在这里不起作用

以上是关于这个函数是啥使它不是函数的主要内容,如果未能解决你的问题,请参考以下文章

是啥使某物成为 C++ 中的抽象类 [重复]

python的lambda函数是啥?

是啥使请求成为asp.net C#中的新请求

函数名周围的括号是啥意思?

JavaScript进入函数上下文到底指的是啥?

Rust 中的函数原型是啥?