Node.js:mongoose.once('open')不执行回调函数

时间:2020-05-29 10:16:21

标签: node.js mongodb mongoose

我正在尝试使用我编写的自定义函数在数据库中保存一些json文件。为了实现这一点,我必须连接到要在函数开始时使用这段代码尝试执行的数据库:

let url = "mongodb://localhost:27017/database";

(async () => {
    const directory = await fs.promises.readdir(__dirname + '/files')
    let database = await mongoose.createConnection(url, {useNewUrlParser:true, useUnifiedTopology:true});
    database.on('error', error => {
        throw console.log("Couldn't Connect To The Database");
    });
    database.once('open', function() {
        //Saving the data using Schema and save();

奇怪的是,在执行database.once('open', function())时根本没有调用回调函数,并且程序只是跳过了整个保存部分,而直接转到函数的结尾。

我在网上搜索了一个解决方案,一个解决方案建议使用mongoose.createConnection的{​​{1}}即时。 如您所见,它并没有真正解决问题,并且仍未调用回调函数。

我如何解决它,为什么会发生?

谢谢!

1 个答案:

答案 0 :(得分:1)

connect()创建一个连接实例,并允许您在documentation状态下管理多个数据库连接。就您而言,使用mongoose.connection就足够了(connect将创建一个默认连接,可以在connect下进行访问)。

通过等待open的承诺,您实际上不需要监听... await mongoose.connect(url, {useNewUrlParser:true, useUnifiedTopology:true}); mongoose.model('YourModel', YourModelSchema); ... 事件,您可以轻松地做到:

routeEnhancers: 
 Jobboerse:
 type: Extbase
 limitToPages:
   - 14
   - 5
 extension: Jobboerse
 plugin: displayjobs
 defaultController: 'Jobs::list'
 routes:
   - { _controller: 'Jobs::show', routePath: '/job/{jobs_title}', _arguments: {'jobs_title': 'jobs'} }
   - { _controller: 'Jobs::application', routePath: '/profil/{jobs_title}', _arguments: {'jobs_title': 'jobs'} }
   - { _controller: 'Jobs::cv', routePath: '/cv/{jobs_title}', _arguments: {'jobs_title': 'jobs'} }
   - { _controller: 'Jobs::questionnaire', routePath: '/fragebogen/{jobs_title}', _arguments: {'jobs_title': 'jobs'} }
 aspects:
   jobs_title:
     type: PersistedAliasMapper
     tableName: tx_jobboerse_domain_model_jobs
     routeFieldName: path_segment
相关问题