我在Node.js中有一个项目,它是一个连接到ChatGPT,Google和其他API的API,获取,保存和发送数据。
因此,我为每个API创建了一个类,一个ChatGPT类,一个GoogleAPI类和一个MongoDb类。但我遇到了一个无法克服的问题。
有一个API类可以初始化所有这些类,我使用它作为不同类之间的桥梁。
在网桥的constructor
类中:
var gptInstance = new ChatGPTManager();
var cronInstance = new CronJobManager();
var dbInstance = new DbManager();
var nlpInstance = new NaturalLanguage();
var apInstance = new AndroidPublisher(database);
问题是DbManager正在连接mongoose,这需要几秒钟,我需要使用AndroidPublisher类中的示例。
由于某种原因,我无法找到返回类并将其发送回AndroidPublisher供其使用的方法。
class API {
constructor() {
this.connect();
}
async connect() {
// API is connected.
console.log(`\x1b[33m%s\x1b[0m`, '-> API Initialized.');
var gptInstance = new ChatGPTManager();
var cronInstance = new CronJobManager();
var dbInstance = new DbManager();
var nlpInstance = new NaturalLanguage();
var apInstance = new AndroidPublisher();
auth = new google.auth.GoogleAuth({
keyFile: config.GOOGLE_AUTH_KEY_FILE,
scopes: config.GOOGLE_AUTH_SCOPES
});
authClient = await auth.getClient();
nlpInstance.connect(authClient);
apInstance.connect(authClient, dbInstance); <-- 'dbInstance' here is undefined
}
}
我甚至尝试在DbManager类中的mongoose连接上设置一个回调,当我有结果时,在nlpInstance和apInstance上调用connect,但我仍然无法从数据库中定义。
1条答案
按热度按时间ssm49v7z1#
您可以利用连接事件。
在您的DbManager类中,使用
mongoose.connect(...)
示例化连接后,您可以使用mongoose.connection
访问 default connection 对象,并监听任何类型的事件。具体来说,您需要open
事件(阅读上面链接的Mongoose文档的 Connection Events 段落)。然后,您只需要调用 default connection 对象上的once
方法,并指定事件和当事件发生时要执行的函数。下面是一个完整的代码示例,包括DB连接的创建:
只有当
open
事件发生时,才能返回DbManager类。