Mongoose 阻止节点脚本结束

Posted

技术标签:

【中文标题】Mongoose 阻止节点脚本结束【英文标题】:Mongoose preventing a node script from ending 【发布时间】:2019-12-02 01:49:19 【问题描述】:

我是 Node.js 的新手。

我有一个脚本,可以进行一堆异步调用,将结果写入数据库,然后应该完成。但是,当逻辑完成执行时,脚本只是坐在那里并且不会退出。我必须 ^c 或明确关闭猫鼬连接。如果我这样做,它就会退出。

确定所有结果都已保存并关闭连接的有效方法是什么?有没有办法在所有连接完成后自动关闭?我需要自己跟踪它们吗?

即使我这样做了,它仍然会在大量任务上崩溃。所以很明显他们还没有完成。

使用同步编程很容易。开始时打开,结束时关闭。但是对于异步,到处都有分叉。我怎么知道一切都结束了?您是否跟踪数据结构中的所有连接?您是否依赖连接超时?必须有一种有效的方法来做到这一点。

谢谢

【问题讨论】:

也许这是你的解决方案***.com/questions/8813838/… 不幸的是 Sam 问题... (node:20122) UnhandledPromiseRejectionWarning: MongoError: server instance pool was destroy 【参考方案1】:

这会有所帮助。

const mongoose = require('mongoose')
const Schema = mongoose.Schema
mongoose.connect("mongodb://localhost/stack-overflow",  useNewUrlParser: true )

var userSchema = new Schema(
    username:  
        type: String,
        required: true,
        unique: true,
        trim: true,
        minlength: 3
    ,
  ,
  
    timestamps: true
  );

const User = mongoose.model('User', userSchema);

// This part below is the answer
async function run() 
    try 
        const result = await User.find()
        console.log(result)
        exitMe();
     catch(error) 
        console.log(error)
    
 

function exitMe() 
    mongoose.connection.close()
    process.exit();


run()

【讨论】:

以上是关于Mongoose 阻止节点脚本结束的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行 Mongodb 的 Mongoose 中执行脚本?

Mongoose 阻止将默认值分配给枚举

如何阻止在 Mongoose 数组中创建重复项 | NodeJS 猫鼬

阻止 Mongoose 为子文档数组项创建 _id 属性

阻止 Mongoose 为子文档数组项创建 _id 属性

阻止 Mongoose 为子文档数组项创建 _id 属性