带有express和mongoDB的NodeJS应用程序

我正在编写这个迷你RESTful应用程序,将请求发送到不同的URL。 为此,我正在使用nodejs,并表示设置不同的path。 作为一个数据库,我正在计划使用monogoDB(由christkv开发的node-mongodb-native)。

我的代码(不包括mongo尝试)看起来像这样:

app.js

/** * Module dependencies. */ var express = require('express') , routes = require('./routes') var app = module.exports = express.createServer(); var Db = require('mongodb').Db; var Server = require('mongodb').Server; var client = new Db('test', new Server('127.0.0.1', 27017, {})); // Configuration app.configure(function() { app.set('views', __dirname + '/views'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); app.configure('development', function() { app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function() { app.use(express.errorHandler()); }); var insertData = function(err, collection) { collection.insert({name: "Kristiono Setyadi"}); collection.insert({name: "Meghan Gill"}); collection.insert({name: "Spiderman"}); } // Routes app.post('/', routes.syncServiceIndex); app.post('/syncService', routes.synchServicePost); app.get('/syncService/:syncServiceUser/sync', routes.synchServiceSync); app.post('/syncService/:syncServiceUser/push', routes.synchServicePush); app.del('/syncService/:syncServiceUser', routes.synchServiceDel); app.post('/syncService/:syncServiceUser/contacts/push', routes.synchServiceContactsPush); app.get('/syncService/:syncServiceUser/contacts/sync', routes.synchServiceContactsSync); app.post('/syncService/:syncServiceUser/contacts/', routes.synchServiceContactsPost); app.get('/syncService/:syncServiceUser/contacts/:contactId', routes.synchServiceContactsGet); app.put('/syncService/:syncServiceUser/contacts/:contactId', routes.synchServiceContactsPut); app.del('/syncService/:syncServiceUser/contacts/:contactId', routes.synchServiceContactsDel); app.listen(3000); console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env); 

为了在不同的文件中保存不同的组件,这是我的每个URL的代码文件:

index.js

 //var ObjectID = db.bson_serializer.ObjectID; exports.syncServiceIndex = function(req, res) { console.log('syncServiceIndex'); //console.log("BODY:" + JSON.stringify(req.body)); res.statusCode = 200; res.send("OK\n"); }; exports.synchServicePost = function(req, res) { console.log('synchServicePost'); console.log("BODY:" + JSON.stringify(req.body)); var jsonObject = JSON.parse(JSON.stringify(req.body)); res.statusCode = 200; res.send("OK\n"); }; exports.synchServiceSync = function(req, res) { console.log('synchServiceSync'); res.statusCode = 200; res.send("OK\n"); }; exports.synchServicePush = function(req, res) { console.log('synchServicePush'); res.statusCode = 200; res.send("OK\n"); }; exports.synchServiceDel = function(req, res) { console.log('synchServiceDel'); res.statusCode = 200; res.send("OK\n"); }; exports.synchServiceDel = function(req, res) { console.log('synchServiceDel'); res.statusCode = 200; res.send("OK\n"); }; exports.synchServiceContactsPush = function(req, res) { console.log('synchServiceContactsPush'); res.statusCode = 200; res.send("OK\n"); }; exports.synchServiceContactsSync = function(req, res) { console.log('synchServiceContactsSync'); res.statusCode = 200; res.send("OK\n"); }; exports.synchServiceContactsPost = function(req, res) { console.log('synchServiceContactsPost'); res.statusCode = 200; res.send("OK\n"); }; exports.synchServiceContactsGet = function(req, res) { console.log('synchServiceContactsGet'); res.statusCode = 200; res.send("OK\n"); }; exports.synchServiceContactsPut = function(req, res) { console.log('synchServiceContactsPut'); res.statusCode = 200; res.send("OK\n"); }; exports.synchServiceContactsDel = function(req, res) { console.log('synchServiceContactsDel'); res.statusCode = 200; res.send("OK\n"); }; 

从我在一些示例代码中看到的,我已经检查出来了,我只应该只使用一个开放的连接,那就是我应该把所有的代码放在

 client.open(function(err, pClient) { }); 

呼叫。 我遇到的问题是,我不知道如何传递客户端或集合,以便我可以使用index.js文件中的数据库。 有没有一种方法可以在目前的布局中做到这一点,还是我必须移动一些东西?

您可以将所有路由包装到callback中,并在中间件中设置req.mongoClient = pClient ,例如:

 client.open(function(err, pClient) { clientMiddleware = function (req, res, next) { req.mongoClient = pClient; next(); } // your routes here, with clientMiddleware app.post('/', clientMiddleware, routes.syncServiceIndex); app.post('/syncService', clientMiddleware, routes.synchServicePost); app.get('/syncService/:syncServiceUser/sync', clientMiddleware, routes.synchServiceSync); // etc. }); 

您现在可以通过在所有路由中使用req.mongoClient来获取客户端。