这个函数是啥使它不是函数
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 语句在这里不起作用以上是关于这个函数是啥使它不是函数的主要内容,如果未能解决你的问题,请参考以下文章