我正在尝试使用我编写的自定义函数在数据库中保存一些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}}即时。
如您所见,它并没有真正解决问题,并且仍未调用回调函数。
我如何解决它,为什么会发生?
谢谢!
答案 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