Это мой основной app.js, где я запускаю соединение mongodb с моей базой данных mlab
const mongo = require('mongodb').MongoClient;
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const cors = require('cors');
const db = require('./routes/db');
const app = express();
const http = require('http').Server(app);
//routes
const users = require('./routes/users');
const url = 'mongodb://user:pw@url/dbname';
var port = process.env.PORT || 3000;
app.use(cors());
app.use(bodyParser.json());
app.use('/users', users);
app.get('/', (req, res) => {
res.send('server');
});
app.use(express.static('../www'));
db.connect(() => {
console.log(`mongodb connected!`);
});
Соединение работает, запускается консольный журнал.Вот как выглядит мой db.js, который я импортирую в мой app.js, чтобы установить соединение (используя метод connection ()):
const mongo = require('mongodb').MongoClient;
const url = 'mongodb://user:pw@url/dbname';
let mongodb;
function connect(callback){
mongo.connect(url, (err, db) => {
mongodb = db;
callback();
});
}
function get(){
return mongodb;
}
function close(){
mongodb.close();
}
module.exports = {
connect,
get,
close
};
Теперь на одном из моих маршрутов я хочу выбратьКоллекция формирует базу данных и выполняет запрос по ней.Это выглядит следующим образом:
const express = require('express');
const router = express.Router();
const mongodb = require('mongodb');
const db = require('./db');
// Get user data
router.get('/:id', (req, res, next) => {
db.get().collection('users').findOne( {"id": userId}, (err, data) => {
if(err) {
res.send(err);
} else {
if(data === null) {
console.log('user doesnt exist');
} else {
res.json(data);
}
}
});
});
Снова импортируем файл db.js для использования методов, используя соединение с базой данных для выполнения запроса.Теперь здесь я получаю сообщение об ошибке:
"Ошибка типа: db.get (...). Коллекция не является функцией"
И я не знаю, почему это не работает.Может кто-нибудь указать мне, где я иду не так?
Заранее спасибо!