簡體   English   中英

如何在 MongoClient.connect 中的 app.use 中插入參數

[英]How to insert parameters in app.use inside MongoClient.connect

我認為在 MongoClient.connect 內部調用 app.use 會更合乎邏輯,以免在路由器內部不斷調用 mongoclient。 如何使db.collection.findapp.use中可用?

 const database = dbm.db('db')` inside `app.use('/api/', authRoute)`

    MongoClient.connect(dburl, function(err, dbm) {
    if(err) throw err;
    const database = dbm.db('db') <<<<< this i want use inside app.use
    app.use('/api/', authRoute);

    // Start the application after the database connection is ready
    app.listen(2222);
    console.log("Listening on port 2222");
});

在 authRoute 我添加了const router = require('express').Router({ mergeParams: true }); ,但沒關系。 這是可能的? 或者我可以在MongoClient.connect多次調用app.use嗎?

提前致謝

TL; DR您不必修改代碼,它可以工作。

ZCCADCDEDB567ABAE643E15DCF0974E503Z 可以很容易地做到這一點。 甚至不需要考慮這個問題,因為 Mongoose 會自動完成。 這意味着一旦您在主服務器文件中添加了MongoClient.connect()並通過運行該文件啟動應用程序,所有后續文件(在您的情況下為路由器)將自動使用此連接。

例如,這是我用於服務器的代碼(在 TypeScript 中)。

import { connect, connection } from 'mongoose';
import { app } from './app';

connect('mongodb://localhost/BaBBS', {
    useUnifiedTopology: true,
    useNewUrlParser: true,
    useCreateIndex: true,
});

const db = connection;

db.once('open', () => {
    console.log('Successful connection to MongoDB');
});

app.listen(1025, () => {
    console.log('Server up and running on port 80');
});

當我運行代碼時,與 Mongoose 邏輯相關的所有內容(例如find )都可以正常工作。

希望這個答案有幫助!

您可以將authRoute定義為工廠 function ,您可以將database連接 object 傳遞到:

const express = require('express');
const router = express.Router();

module.exports = (db) => {  
    router.post('/login', (req,res) => {
       // you can now use db here
       db.doSomething();
       res.send(...);
    });
    // more routes here
    return router;
}

然后,您可以像這樣使用您的工廠 function:

// ...
const database = dbm.db('db')
app.use('/api/', authRoute(database));

暫無
暫無

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

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