虽然这个问题已经被问了很久,但我会为那些希望使用 mongodb
而不是 mongoose
或者 mongojs
的人发表回答(在撰写本文时,mongojs 依赖于较旧并且不安全的 mongodb 驱动程序)。
简化版
程序正常执行,但是添加一行代码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();
});
为什么使用mongodb.connect()
时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!
您将不会再收到命令行提示。
总之,请记得关闭您的数据库连接,这样世界就会变得更美好!
mongojs
库,它更像是本机驱动程序的薄封装。这不会强制你使用预定义的结构,这也是NoSQL试图避免的。 - Risto Novikmongojs
和mongoose
,mongojs
的接口和mongodb
本身一样,非常好用。 - Andrew_1510