[英]mongodb node.js client, connect hangs
node-mongodb-native node.js 客戶端在MongoClient.connect(...)
時掛起,但mongodb-client (shell command line)
在終端上工作。 有什么線索嗎?
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的驅動程序的早期不安全的版本取決於) .
程序正常執行,但添加了一行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()
時出現掛起如本答案中所述,當節點有等待事件的回調時,它不會退出。
在這種情況下, 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!
您將不會收到進一步的命令行提示。
總之記得關閉你的數據庫連接,一切都會好起來的!
對於面臨類似問題的任何其他人,我所要做的就是添加一個.catch
並且從那里開始工作正常:
const mongodb = require("mongodb");
const connectDb = mongodb.MongoClient.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
}).catch(err =>
res.status(400).json({ msg: `Could not connect to MongoDB`, err })
);
module.exports = connectDb;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.