首页 > 解决方案 > 如何在 MongoClient.connect 中的 app.use 中插入参数

问题描述

我认为在 MongoClient.connect 内部调用 app.use 会更合乎逻辑,以免在路由器内部不断调用 mongoclient。如何使db.collection.find里面可用app.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吗?

提前致谢

标签: node.jsmongodbexpress

解决方案


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

Mongoose 很容易做到这一点。甚至不需要考虑这个问题,因为 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正常工作。

希望这个答案有帮助!


推荐阅读