проблема в том, что вы ничего не возвращаете из db. js, вы подключаетесь к mon go и запускаете express.
, по моему мнению, вы должны отделить подключение db от express start, потому что вы планируете использовать db во всех своих моделях и не будете запускать сервер express каждый раз. Вам также следует рассмотреть возможность создания только одного подключения к базе данных.
db. js может выглядеть следующим образом:
const client = require("mongodb").MongoClient;
const config = require("../config");
let _db;
function initDb(callback) {
if (_db) {
console.warn("Trying to init DB again!");
return callback(null, _db);
}
client.connect(config.db.connectionString, config.db.connectionOptions, connected);
function connected(err, db) {
if (err) {
return callback(err);
}
console.log("DB initialized - connected to: " + config.db.connectionString.split("@")[1]);
_db = db;
return callback(null, _db);
}
}
function getDb() {
return _db;
}
module.exports = {
getDb,
initDb
};
Тогда вы можете использовать его следующим образом:
Ваш основной файл будет выглядеть следующим образом:
const initDb = require("./db").initDb;
const getDb = require("./db").getDb;
const app = require("express")();
const port = 3001;
app.use("/", exampleRoute);
initDb(function (err) {
app.listen(port, function (err) {
if (err) {
throw err; //
}
console.log("API Up and running on port " + port);
});
);
function exampleRoute(req, res){
const db = getDb();
//Do things with your database connection
res.json(results);
}
PS Если это новое приложение, использующее последнюю версию NodeJS, вам следует изучить ES6 и более современные способы создания классов, вместо этого используйте async / await. обратных вызовов