Выбор коллекций не работает в моем бэкэнде nodejs - PullRequest
0 голосов
/ 22 февраля 2019

Это мой основной 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 (...). Коллекция не является функцией"

И я не знаю, почему это не работает.Может кто-нибудь указать мне, где я иду не так?

Заранее спасибо!

1 Ответ

0 голосов
/ 22 февраля 2019

Я думаю, что соединение не было инициализировано. Пожалуйста, попробуйте этот код. Я не проверял его.

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.connect(()=>{
    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);
                }
            }
        });
    });

    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...