gpt4 book ai didi

javascript - mongodb node.js 客户端,连接挂起

转载 作者:行者123 更新时间:2023-12-02 22:35:30 24 4
gpt4 key购买 nike

node-mongodb-nativeMongoClient.connect(...) 时,node.js 客户端挂起,但 mongodb-client(shell 命令行) 在终端上运行。有什么线索吗?

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect(
'mongodb://my.mongo.db.server.ip:27017/test',
function(err, db) {

if(err) throw err;
console.log("shows during connect call back");

});

// When load into node shell, it hangs forever

最佳答案

这个问题已经被问了很长时间了,但我会为那些希望使用 mongodb 而不是 mongoose 的人发布答案mongojs(在撰写本文时,mongojs 依赖于较旧的不安全版本的 mongodb 驱动程序)。

TL;DR 版本

程序正常执行,但添加行 db.close(); 将允许程序正常终止:

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect(
'mongodb://my.mongo.db.server.ip:27017/test',
function(err, db) {
if(err) throw err;
console.log("shows during connect call back");
db.close(); //call this when you are done.
});

为什么使用mongodb.connect()时 Node 似乎挂起

this answer 中所述,当 Node 有回调等待事件时, Node 不会退出。

在本例中,connect() 注册一个回调,等待事件 'close' 发出,表明所有数据库连接已关闭。这就是为什么除非您调用db.close(),否则您的脚本将会挂起。但请注意,您编写的所有代码都将执行,您的程序只是不会正常终止

示例

为了演示,如果将以下代码块放入名为 connect.js 的文件中...

const MongoClient = require('mongodb').MongoClient;
async function dbconnect() {
console.log("This will print.");

const db = await MongoClient.connect(
'mongodb://my.mongo.db.server.ip:27017/test');

console.log("This will print too!");

并在终端中执行它...

$ node connect.js

结果将是:

$ node connect.js
This will print.
This will print too!

您将不会再收到任何命令行提示。

总之,请记住关闭数据库连接,一切都会好起来的!

关于javascript - mongodb node.js 客户端,连接挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21848406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com