gpt4 book ai didi

javascript - module.exports 不会导出带有函数的对象

转载 作者:行者123 更新时间:2023-12-03 03:31:02 26 4
gpt4 key购买 nike

我已经创建了一个 ModulesManager 来管理我的所有模块,因此我的“server.js”顶部没有大量的需求列表,但每次我尝试访问管理器的方法时,我的服务器崩溃并抛出一个错误,表明我的管理器方法不是一个函数。

TypeError: moduleManager.sqlString is not a function

我不太确定我在这里做错了什么,这可能是一个愚蠢的错误,我试图在网上寻找答案,但每个人都在说不同的东西,但没有任何作用。

模块管理器(manager.js):

const sqlSetup = require("./sqlSetup.js");
const sqlSafeString = require("./sqlString.js");

function Manager(){
this.sqlString = function(query){
return sqlSafeString.getSqlSafeString(query);
},
this.sql = function(){
return sqlSetup;
}
}
module.exports = Manager;

模块 SQL (sqlSetup.js):

const SqlString = require('sqlstring');

function getSqlSafeString(query){
//format query to fit in MySQL
var format = SqlString.escape(query);
return format;
}
module.exports = getSqlSafeString;

这是对我正在尝试进行的 Travis 构建的测试,模块管理器路径很好,问题实际上出在我不理解的“ModuleManager.js”中......

require('dotenv').config();
const Discord = require("discord.js");
const client = new Discord.Client();
const token = process.env.MOISTY;
const moduleManager = require("../modules/manager.js");
const assert = require("assert");

console.log("MAKE SURE MOISTY IS OFFLINE!");

client.login(token);

client.on('ready', () => {
//confirm login
console.log("MOISTY:200");

//Assert
assert.deepEqual(moduleManager.sqlString("sample text"), "sample test");

//terminate the session
process.exit();
});

我不太习惯模块导出,所以这可能是一个简单的问题......

最佳答案

您的代码中有多个错误。

module.exports = getSqlSafeString;export 设置为 getSqlSafeString

当您执行 require("./sqlString.js") 时,您将获得分配给 exports 的值,因此在您的情况下,getSqlSafeString .

因此,如果您想访问该函数,您可以编写:

const getSqlSafeString = require("./sqlString.js");
//...
return getSqlSafeString(query);`

module.exports = Manager; 导出函数 Manager,但不是 Manager 类型的对象,因此 moduleManager.sqlString 将等于Manager.sqlString。如果您只想将函数分组到一个对象中,那么使用构造函数在这里无论如何都没有多大意义,因此您应该这样编写:

module.exports = {
sqlString : function(query){
return sqlSafeString.getSqlSafeString(query)
},
sql : function(){
return sqlSetup
}
};

如果您确实想在 Manager 类型的对象上创建,那么您需要编写:

module.exports = new Manager

关于javascript - module.exports 不会导出带有函数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46101610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com