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函数移动到不同的文件。