我正在嘗試構建一個快速服務器。
在app.js檔案中,我創建了服務器并嘗試連接到我的 mongodb。
import express from "express";
import dbo from "./db/conn.js";
const app = express();
app.listen(PORT, async () => {
await dbo.connectToDatabase();
log.info(`Server is running on port: ${PORT}`);
});
在檔案中conn.js
const client = new MongoClient(uri);
let db: Db;
export async function connectToDatabase() {
try {
await client.connect();
db = client.db(dbName);
await db.command({ ping: 1 });
log.info(`Successfully connected to database: ${db.databaseName}.`);
} finally {
await client.close();
}
}
export async function getDb() {
return db;
}
export default { connectToDatabase, getDb };
現在在一個單獨的檔案中,我想使用我在app.js檔案中創建的資料庫連接。
像這樣:
const collection = getDb().collection(collectionName);
// insert documents in collection.
但是當我嘗試運行應用程式時出現錯誤TypeError: Cannot read properties of undefined。
那么,有沒有辦法等到建立資料庫連接?
uj5u.com熱心網友回復:
您的代碼存在一些問題。
首先,該getDb函式回傳承諾。所以你不能馬上使用收集方法。洗掉async關鍵字,因為當前getDb函式不是異步函式。
export function getDb() {
return db;
}
其次,在try & finally陳述句中,不管代碼中是否出現例外,都會無條件地執行finally塊。因此,在顯示連接成功日志后connectToDatabase,連接立即關閉。為了插入資料,必須連接連接,所以請擦除await client.close();finally 塊中的代碼 from connectToDatabase。
然后,您可以毫無問題地將檔案添加到集合中。
uj5u.com熱心網友回復:
完成您嘗試做的事情的一種方法是將該連接傳遞給您在其他地方定義的類或函式。
假設這是您的集合代碼(或者任何需要原始資料庫連接實體才能使用的集合之外的東西):
class Collection {
constructor(db) {
this.db = db
//do whatever else needs to be setup
}
use(name) {
//or use it here
this.db.use(name)
}
}
export default Collection
然后在你的主檔案中一些代碼:
import Collection from './Collection.js'
const collection = new Collection(getDb)
collection.use('some arbitrary name')
這只是一種方法,但還有其他方法。此外,如果這是使用上述 getDb() 方法的唯一方法,則可以將其從 main 中洗掉并將其作為管理器放在這里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/482945.html
標籤:javascript 节点.js 打字稿 mongodb 表示
下一篇:如何清除另一個應用程式的快取?
