这是我的主要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不是函数”
我不知道为什么这不起作用。有人可以指出我哪里出问题了吗?
谢谢!
答案 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);
}
}
});
});
});