nodejs查询数据和代码组织

刚开始学习nodejs,对于js来说也是相当新颖的,并且四处寻找最佳实践并碰到了这个问题: https ://stackoverflow.com/a/15572522/1203349

我正在使用这种结构的应用程序。 他build议把db调用放在相应的model / model.js文件中。
例如
使用他的示例,假设我想要一个完整的博客列表。
routes / blog / index.js中 ,我应该这样做:

var Model = require('../../models'); module.exports = function(app){ app.get('/blog', function(req,res){ //what now? function calls into Model? how? //also, why doesn't Model.blogModel.find({}, function(err, blogs){ //work with blogs //}; work? I'm getting a ReferenceError: blogModel is not defined. }); } 

models / blog.js中

 .... exports.<every function for crud>? 

示例实现将不胜感激。

Amol的答案是好的,应该让你开始,但是这也听起来像你在模块方面有代码组织方面的问题。

对于您的项目中的本地模块,假设您有一个名为models.js的文件,如下所示:

 // models.js function Customer () { // some properties } function Invoice () { // some properties } module.exports = { Customer: Customer, Invoice: Invoice } 

然后在你的主应用程序中,你可以这样访问你的模型:

 // app.js var models = require('./models') myCustomer = new models.Customer(); myInvoice = new models.Invoice(); 

希望有所帮助,
亚伦

我希望通过下面的代码,您将解决您的问题。

 var express = require('express') , routes = require('./routes') , http = require('http'); var Db = require('mongodb').Db; var Server = require('mongodb').Server; var app = express(); app.configure(function () { app.set('port', process.env.PORT || 3000); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); app.engine('html', require('hbs').__express); app.set('views', __dirname + '/views/html'); app.set('view engine', 'html'); // app.set('view engine', 'jade'); }); app.configure('development', function () { app.use(express.errorHandler()); }); // ROUTE HANDLING app.get('/', function (req, res) { var listData = function (err, collection) { collection.find().toArray(function (err, results) { console.log(results); res.render('index.html', { layout: false, 'title': 'Monodfbvgde-crud Prototype using express', 'results': results }); }); } var Client = new Db('TrialDB', new Server('127.0.0.1', 27017, {}), { safe: false }); Client.open(function (err, Client) { Client.collection('users', listData); //Client.close(); }); }) app.get('/add_record', function (req, res) { res.render('add.html', { layout: false, 'title': 'Monode-crud' }); }) app.post('/save_record', function (req, res) { console.log(req.body); var data = { 'first_name': req.body.first_name, 'last_name': req.body.last_name, 'email': req.body.email, 'password': req.body.pwd }; var insertData = function (err, collection) { collection.insert(data); } var Client = new Db('TrialDB', new Server('127.0.0.1', 27017, {})); Client.open(function (err, Client) { Client.collection('users', insertData); Client.close(); }); res.redirect('/'); }); app.get('/edit_record/:id', function (req, res) { var ObjectID = require('mongodb').ObjectID; var listData = function (err, collection) { var chosenId = new ObjectID(req.params.id); collection.findOne({ '_id': chosenId }, function (err, results) { console.log(results); res.render('edit.html', { layout: false, 'title': 'Monode-crud', 'results': results }); }); } var Client = new Db('TrialDB', new Server('127.0.0.1', 27017, {})); Client.open(function (err, Client) { Client.collection('users', listData); //Client.close(); }); }); app.post('/update_record', function (req, res) { console.log(req.body); var ObjectID = require('mongodb').ObjectID; var data = { 'first_name': req.body.first_name, 'last_name': req.body.last_name, 'email': req.body.email }; var updateData = function (err, collection) { var chosenId = new ObjectID(req.body.id); collection.update({ "_id": chosenId }, { $set: data }); } var Client = new Db('TrialDB', new Server('127.0.0.1', 27017, {})); Client.open(function (err, Client) { Client.collection('users', updateData); Client.close(); }); res.redirect('/'); }); app.get('/delete_record/:id', function (req, res) { var ObjectID = require('mongodb').ObjectID; var removeData = function (err, collection) { var chosenId = new ObjectID(req.params.id); collection.remove({ '_id': chosenId }); } var Client = new Db('TrialDB', new Server('127.0.0.1', 27017, {})); Client.open(function (err, Client) { Client.collection('users', removeData); //Client.close(); }); res.redirect('/'); }); // END ROUTE http.createServer(app).listen(app.get('port'), function () { console.log("Monode sample server listening on port " + app.get('port')); }); 

一旦你完成你可以将CURD函数移动到不同的文件。