簡體   English   中英

無法讀取未定義 MongoDB nodejs 驅動程序的屬性“集合”

[英]Cannot read property 'collection' of undefined MongoDB nodejs driver

我正在嘗試將 mongodb 連接傳遞給所有其他路由,所以我創建了另一個文件並在那里導入了 mongoClient 並將 connect 和 getDb 包裝在函數中,這樣我就可以先從 server.js 連接到數據庫,然后從其他文件,但我知道為什么我Cannot read property 'collection' of undefined

服務器.js

const express = require('express')
const bodyParser = require('body-parser')
const mongodb = require('./mongodb/db.js')
const auth = require('./routes/auth.js')
require('dotenv').config()

const app = express();
app.use(bodyParser.json());
const PORT = process.env.PORT

app.get('/api', (req, res) => {
    res.send('Welcome to the api')
})

app.use('/api/auth', auth);


mongodb.connect(() => {
    app.listen(PORT, () => {
        console.log(`app is listening at http://localhost:${PORT}`)
    })
})

./mongodb/db.js

const MongoClient = require('mongodb').MongoClient;
const DB_URL = process.env.DB_URL
const DB_NAME = process.env.DB_NAME
const dbClient = new MongoClient(DB_URL, { useUnifiedTopology: true })

let db;

const connect = (callback) => {
    dbClient.connect().then(client => {
        db = client.db(DB_NAME)
        console.log("connected to db")
    }).catch(console.log)

    callback()
}

const get = () => {
    return db;
}

module.exports = {
    connect,
    get
};

./routes/auth.js

const express = require('express')
const router = express.Router();
const db = require('../mongodb/db.js');

const smth = db.get();
console.log(smth) //undefined;


const usersCollection = db.get().collection('users');
const authCollection = db.get().collection('auth')

router.post('/login', async (req, res) => {
    ...
})

router.post('/register', async (req, res) => {
    ...
})

module.exports = router

您在 ./mongodb/db.js 的connect function 中的./mongodb/db.js鏈之外調用callback 您可能在那里遇到了一些異步問題,因為 function 可以在 promise 鏈解決之前返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM