在实际发生initmongo之前加载了user.js。因此mongodb将保留getdb变量的未定义值。
重构的最简单方法是将getdb从变量更改为函数,这样代码看起来就类似于:
共同的
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'onthemove';
let db;
const initMongo = async () => {
const client = await MongoClient.connect(url);
db = await client.db(dbName);
await db.collection('comments').insert({text: 'hello'});
};
module.exports = {
initMongo,
getDb() {
return db;
},
};
用户.js
const mongoDB = require('./common_mongo.js');
app.get('/users', async (req, res) => {
let list = await mongoDB.getDb().collection('user').find({})
res.send(list);
})
甚至可以定义getter而不是getdb
module.exports = {
initMongo,
get db() {
return db;
},
};
app.get('/users', async (req, res) => {
let list = await mongoDB.db.collection('user').find({})
res.send(list);
})