Javascript 节点进程不使用mongoose索引退出

Javascript 节点进程不使用mongoose索引退出,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,通过运行节点my script.js,此代码将正确退出: const mongoose = require('mongoose') const FooSchema = new mongoose.Schema({ name: {type: String, required: true} }) const Foo = mongoose.model('Foo', FooSchema) mongoose.connect('mongodb://localhost/foo') mongoose

通过运行
节点my script.js
,此代码将正确退出:

const mongoose = require('mongoose')

const FooSchema = new mongoose.Schema({
    name: {type: String, required: true}
})

const Foo = mongoose.model('Foo', FooSchema)

mongoose.connect('mongodb://localhost/foo')
mongoose.disconnect()
但这一条没有:

const mongoose = require('mongoose')

const FooSchema = new mongoose.Schema({
    name: {type: String, required: true}
})
FooSchema.index({name: 'text'})

const Foo = mongoose.model('Foo', FooSchema)

mongoose.connect('mongodb://localhost/foo')
mongoose.disconnect()
错误是:

MongoError:拓扑已被破坏

这里唯一的区别是我使用了
index
函数。是否有一种方法可以先“执行”index函数,然后再执行其他操作,以便干净地退出


旁注:我想确保在这一行之后:
FooSchema.index({name:'text'})
实际创建了索引。

您收到的错误是由于在执行写操作时断开连接造成的

如果等待
'index'
事件断开连接,则应解决此问题:

FooSchema.on('index', function(error) {
  mongoose.disconnect()
  // then to exit the script use 
  process.exit()
});

创建索引时,mongoose不会发出
索引
事件吗?@Mark\M好的,谢谢!但是,添加
Foo.on('index',函数(error){console.log(error)}
会显示
未定义的
,并且不会更改错误消息。我的问题是:“是否有一种方法可以先“执行”索引函数,然后再执行其他任何操作,以便干净地退出?”您可以在回调处理程序中放入任何希望发生的事情after@maioman好的,谢谢!我不确定我是否理解你的评论。我不想在回调时做什么,我想执行index函数,然后继续正常执行脚本。在回调中继续脚本不是一个选项(也可能不起作用)。但也许我误解了什么。您可以以anwser的身份发布您的评论…可能此文档将有助于
FooSchema.on('index',函数(error){mongoose.disconnect()})
永不追加,脚本将无限运行。再次感谢!即使退出,也不会追加任何内容(似乎永远不会进入回调)。不要创建索引,而是尝试在数据库中插入
insert
,并检查它是否正确写入。同样的问题也发生在:
Foo.create({name:'text'})