清理MongoDB/Node.js/Express代码和路由

清理MongoDB/Node.js/Express代码和路由,node.js,database,mongodb,express,routes,Node.js,Database,Mongodb,Express,Routes,不久前,我开始使用MongoDB和Node.js学习数据库,并试图找到一种不使用mongoose而使用Express routes的方法。我想插入数据使用快速路线和干净的代码导出不同的模块。问题是我不能写路由 如下所示,因为在我的index.js文件中“db”当然没有定义,显然我不能像mongoose那样在“client.connect”函数之外将数据插入我的“db”。我是否必须在一个文件中将我的数据库与我的所有帖子连接起来,或者是否有一种特定的方法来连接?(对不起我的英语,我正在学。) App

不久前,我开始使用MongoDB和Node.js学习数据库,并试图找到一种不使用mongoose而使用Express routes的方法。我想插入数据使用快速路线和干净的代码导出不同的模块。问题是我不能写路由 如下所示,因为在我的index.js文件中“db”当然没有定义,显然我不能像mongoose那样在“client.connect”函数之外将数据插入我的“db”。我是否必须在一个文件中将我的数据库与我的所有帖子连接起来,或者是否有一种特定的方法来连接?(对不起我的英语,我正在学。)

App.js:

const express = require('express');
const app = express();
const expressLayouts = require('express-ejs-layouts');
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');

//EJS
app.use(expressLayouts);
app.set('view engine', 'ejs');

//Styles
app.use('/public', express.static('public'));

//Bodyparser
app.use(express.urlencoded({extended: false}));


//Connect to DB
const url = 'mongodb://localhost:27017/shopping'
const dbName = 'shopping';
const client = new MongoClient(url);

client.connect((err)=>{
    assert.equal(null, err);
    console.log('connected to db...');

    app.use('/', require('./routes/index'));    

    const db = client.db(dbName);
});

//Server
app.listen(3000, ()=>{console.log("Listening to port 3000")});
index.js(路由):


js应该包含一个传递mongo客户端的函数。例如:

let mongoClient
router.passMongoClient = function(clientIn){
   mongoClient = clientIn
}
然后在启动客户机后,通过新函数传递它

const router = require(./router)

client.connect((err)=>{
    assert.equal(null, err);
    console.log('connected to db...');

    app.use('/', require('./routes/index'));    
    const db = client.db(dbName);
    router.passMongoClient(db)
});

这是基本思想。您可能希望代码的结构稍有不同。我等待启动http服务器,直到从连接的mongodb客户端获得回调。在某种程度上取决于您的用例。

谢谢!我想我明白了。
const router = require(./router)

client.connect((err)=>{
    assert.equal(null, err);
    console.log('connected to db...');

    app.use('/', require('./routes/index'));    
    const db = client.db(dbName);
    router.passMongoClient(db)
});