我正在使用mongoDB
/ node
express
数据库,我想知道如何让这更简洁。
app.get('/mediums', function(req, res){
db.open(function(err, db) {
db.collection('mediums').find().toArray(function(err, info){
res.json(info)
db.close();
})
});
});
app.get('/categories', function(req, res){
db.open(function(err, db) {
db.collection('categories').find().toArray(function(err, info){
res.json(info)
db.close();
})
});
});
app.get('/stock', function(req, res){
db.open(function(err, db) {
db.collection('stock').find().toArray(function(err, info){
res.json(info)
db.close();
})
});
});
我想写一次db.open
,然后在需要时给它打电话
更像是
database = db.open(function(err, db) {
db.collection('stock').find().toArray(function(err, info){
callback()
db.close();
})
});
app.get('/stock', function(req, res){
database.collection('stocks').find().toArray(function(err, info ){
res.json(info)
})
});
我知道这不是有效的JS,但这样的事情会很棒!
答案 0 :(得分:1)
通常,mongoDB
连接在服务器运行时永远保持打开状态。每次打开和关闭连接都是低效且麻烦的。只需在启动服务器时打开连接,并将该变量传递到需要查询数据库的任何位置。
你可以做这样的事情
db.open(function(err, db) {
//start your express server here
//use the db to query in the routes.
//If you need the db in other files, you can use something like exports.db=db
//in the case db isn't a singleton.
})
答案 1 :(得分:1)
您可以将应用初始化内容放在db.open
的回调中。像这样:
db.open(function(err, db) {
app.get('/mediums', function(req, res){
db.collection('mediums').find().toArray(function(err, info){
res.json(info);
});
});
app.get('/categories', function(req, res){
db.collection('categories').find().toArray(function(err, info){
res.json(info);
});
});
app.get('/stock', function(req, res){
db.collection('stock').find().toArray(function(err, info){
res.json(info);
});
});
});
您可能还希望在.listen
回调中进行db.open
调用,以便在数据库连接打开之前应用程序不会开始侦听。
答案 2 :(得分:0)
您可以尝试这样的事情:
app.js / server.js
...
let _db = null;
MongoClient.connect('mongodb://localhost/test', (err, db) => {
_db = db;
});
app.use(function(req, res, next) {
res.locals.db = _db;
next();
});
...
<强>路由/ mediums.js 强>
...
router.get('/mediums', function(req, res) {
res.locals.db.collection('mediums').find().toArray(function(err, info){
res.json(info)
db.close();
});
});
...