Я знаю, что этот вопрос уже задан более чем пару раз, но я не могу найти ответ на свой конкретный вопрос.Как обрабатывать соединение MongoDB и запросы в ExpressJS
Я создал пример приложения с express-generator
, и я создал модуль со всеми параметрами соединения.
/helpers/db.js
var MongoClient = require('mongodb').MongoClient;
var ObjectId = require('mongodb').ObjectID;
var url = 'mongodb://localhost:27017/piva';
var db;
var database = {
connect: function(){
MongoClient.connect(url, function(err, database) {
if(err) throw 'MongoDB connection error: ' + err;
console.log('connesso al db');
db = database;
});
},
useDb: function(){
return db;
}
}
module.exports = database;
Если я позвоню в главном app.js
файле require('./helpers/db').connect()
и я требую модуля в одном из моих маршрутов с использованием
/routes/index.js
var db = require('../helpers/db').useDb();
router.get('/', function (req, res, next) {
db.collection('test')....
index.render({
title: 'Home page'
}, res);
});
он не работает, так как db
возвращает undefined
, а если я требую его внутри router.get
, он работает. Я думаю, что я должен начать подключение до загрузки приложения, но я не знаю, как с этим справиться.
Я видел много Tuts или ответа, где они говорят, чтобы позвонить app.listen(3000);
с обратным вызовом после Mongoclient.connect()
подключился к БД, но я не знаю, как это сделать, так как мое приложение было создано с express-generator
.
Вы должны взглянуть на точку входа вашего приложения. Экспресс-генератор помещает его в /bin/www.js. Вы найдете вызов 'listen()' там и можете связать его с обратным вызовом 'connect()'. – PeterVC
Я завернул все следующее в 'connect()' callback' server = http.createServer (app); server.listen (порт); server.on ('error', onError); server.on («прослушивание», onListening); «но все равно не работает ... что мне не хватает? Если я 'console.log (db)' сразу после 'require' на странице' index.js', я все еще получаю 'undefined' ... – crash
Как вы передаете ссылку на 'db' из обратного вызова? Мне нужно посмотреть, что вы сделали на www. – PeterVC