我幾乎完成了我的應用程式,我想將我的 MongoDB 資料庫連接到無服務器平臺 MongoDB Atlas。在那之前,我一直在 localhost(使用 mongosh)中使用我的資料庫,并且它運行得非常好。現在我已將“mongodb://localhost”更改為我的資料庫地址,但出現錯誤:MongoNotConnectedError: MongoClient must be connected to perform this operation
這是我在 db-connection.js 中的代碼:
require('dotenv').config();
let { MongoClient } = require('mongodb');
function connect(collection) {
let client = new MongoClient(`mongodb srv://${process.env.DB_USER}:${process.env.DB_PASSWORD}@calendrier-delle.2rqpi.mongodb.net/calendrierdelle?retryWrites=true&w=majority`);
client.connect();
let calendrierDelle = client.db('calendrierdelle');
let collections = calendrierDelle.collection(`${collection}`);
return collections;
}
module.exports = { connect };
還有我在 server.js 中的代碼片段:
require('dotenv').config();
let express = require("express");
let app = express();
let dbConnection = require("./db-connection.js");
//Here is an example of how I make an query
let query = dbConnection.connect("aCollection").find({
something: (some value),
}).toArray();
query.then((data) => { /* Do something with the data */ });
準確地說:
? 我不使用貓鼬,因為我真的不需要,而且我懶得換,哈哈。
? 在 MongoDB Atlas 上,我添加了一個 IP 地址 0.0.0.0/0
? 我的用戶名和密碼是貨
? 這是我的集群名稱和資料庫名稱的螢屏截圖
在我連接資料庫的代碼中,我真的不明白為什么在 url 的末尾我將我的應用程式與資料庫連接,然后我必須做同樣的事情:client.db('calendrierdelle')。我認為這是我的問題,但我不知道如何解決它:我已經嘗試了所有方法(更改 url、省略我的 calendrierDelle 變數等...)。
你能幫我嗎 ?謝謝 !
PS:抱歉,我在該帖子中添加了貓鼬標簽,我不使用它,但這與我的問題非常接近。
uj5u.com熱心網友回復:
JavaScript 是異步的,這意味著操作不會等待操作完成。您嘗試在不等待 MongoDB 連接的情況下對資料庫執行操作。幸運的是,MongoDB 并沒有讓 Promises 和async/變得太難await。您可以像這樣讓事情“等待”Mongo 連接:
require('dotenv').config();
let { MongoClient } = require('mongodb');
async function connect(collection) {
let client = new MongoClient(`mongodb srv://${process.env.DB_USER}:${process.env.DB_PASSWORD}@calendrier-delle.2rqpi.mongodb.net/calendrierdelle?retryWrites=true&w=majority`);
await client.connect();
let calendrierDelle = client.db('calendrierdelle');
let collections = calendrierDelle.collection(`${collection}`);
return collections;
}
module.exports = { connect };
注意await前面的client.connect()。還要注意 connect 函式async在它前面。在 NodeJS 的最新版本之前,await 必須在異步函式中。
uj5u.com熱心網友回復:
require('dotenv').config();
let { MongoClient } = require('mongodb');
const url =
`mongodb srv://${process.env.DB_USER}:${process.env.DB_USER_PASSWORD}@
${process.env.DB_CLUSTER}.mongodb.net`;
async function connectDatabase() {
const client = await MongoClient.connect(url, {
useNewUrlParser: true,
useUnifiedTopology: true
});
const db = client.db("main");
return {
listings: db.collection("test_listings")
};
};
module.exports = { connectDatabase };
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/401469.html
標籤:数据库 MongoDB 表达 猫鼬 mongodb-图集
上一篇:Mongoose:填充2級子物件
