Javascript expressrestfulapi中的Discord.js

Javascript expressrestfulapi中的Discord.js,javascript,node.js,rest,express,discord.js,Javascript,Node.js,Rest,Express,Discord.js,我试图在一个快速RESTful API中使用该库。我想知道如何在控制器之间共享客户机,因为客户机是异步初始化的,而且多次调用client.login(…)显然是不好的做法。换句话说,我有一个异步初始化方法,我不能多次调用,我需要跨多个控制器访问这个客户机。以下是我现在正在做的: discord.helper.js const Discord=require('Discord.js'); const client=new Discord.client(); client.login(process

我试图在一个快速RESTful API中使用该库。我想知道如何在控制器之间共享客户机,因为客户机是异步初始化的,而且多次调用
client.login(…)
显然是不好的做法。换句话说,我有一个异步初始化方法,我不能多次调用,我需要跨多个控制器访问这个客户机。以下是我现在正在做的:

discord.helper.js

const Discord=require('Discord.js');
const client=new Discord.client();
client.login(process.env.DISCORD\u BOT\u令牌);
导出默认客户端;
我的问题是,由于
client.login()
是异步的,但只能调用一次,因此我无法导入此文件,因为假定bot已经初始化。关于如何构造此模块,以便在假设已初始化的情况下可以多次导入它,您有什么想法吗?

客户端#登录是异步的,但解析后不会返回
客户端
实例

您可以放心地假设只要客户端能够登录,它就可以使用,但是如果可能的话,我会让您的Express服务器接受客户端的一个实例

从“/server”导入{createServer}
从“discord.js”导入{Client}
const client=new client()
const app=startServer(客户端)
client.login(process.env.DISCORD\u BOT\u令牌)
app.listen(3000,()=>{
log(“Express服务器正在侦听端口3000”)
});
createServer

从“express”导入express
export const createServer=client=>{
const app=express()
app.get(“/”,(\uRes)=>{
res.send(${client.user.username}说你好`)
})
返回应用程序
}

Hmmm…这是可行的,但不适用于像我这样的模块化项目。另外,考虑到Discord.js只在一条路线上使用,这似乎有点骇人听闻。我的“模块化”是指你在monorepo中工作吗?如果是这样的话,像这样导出客户机实例应该没有问题。它不是monorepo,不是。但是,我有一些路由器,它们调用控制器,调用调用调用模型的服务,模型需要访问Discord.js客户机。将客户机通过所有这些级别传递到模型层是没有意义的。您还可以在登录/初始化客户机后导入模型中的客户机实例,之后可以在任何位置使用(不应再次登录),尝试将就绪事件侦听器添加到您的客户机和控制台日志中,以便确保它没有多次登录。