选择在我的nodejs后端不起作用的收藏集

时间:2019-02-22 09:52:50

标签: node.js mongodb express

这是我的主要app.js,在这里我启动了与mlab数据库的mongodb连接

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文件以使用方法,并使用数据库连接来执行查询。现在在这里我得到了错误:

“ TypeError:db.get(...)。collection不是函数”

我不知道为什么这不起作用。有人可以指出我哪里出问题了吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为connect尚未初始化。请尝试此代码。我没有检查它。

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);
                }
            }
        });
    });

    });