Node.JS MVC – 在哪里放数据访问代码?

我现在有几个小型的Node.js / Express应用程序正在运行,但我从来没有满意任何数据库访问解决scheme。

  • 我从包含数据库访问的“胖控制器”开始,
  • 我尝试使用Mongoose的“胖模型”,但这严重污染了数据库访问的模型;
  • 我尝试了一种我将用Java实现的DAO模式,并将模型转换回值对象以移动数据,但这并不是很习惯。

你在哪里认为Node.js MVCnetworking应用程序的数据库访问代码?

回来ActiveRecord,都被原谅了。

在我看来,这真的取决于你正在使用什么样的数据库拱。 在使用MySQL时,我通常在控制器中使用它们,而在使用MongoDB时,我把它们放到模型中,因为它感觉更自然。 说实话,NodeJS更像是一个升级的javascript,MVC就是这个定义。

在考虑MVC和通过NPM的NodeJS结构之后,可以很容易地想到将数据库访问转换为新的模块。 我也不完全满意在nodeJS中实现数据库访问的方式。

在使用Express时,虽然我们通常使用RESTful接口并使用路由来填充CRUD操作。 我的应用程序从来没有那么大,这样的行为本来是压倒性的大,但是对于大项目,人们可能想要构build这样的路线

app.get('/api/item', function(req, res){ //access to your API and do database business }); 

到一个更合适和有组织的forms,把它们分成一个名为datbase.js的数据库访问文件,可以通过你的主应用程序加载

 require('./datbase.js').setupDatabase('localhost', port); 

例如,这样的数据库组织者可能看起来像

 function setupDatabase(address, port) { //connect to your datbase //access to your API and do database business }); } module.exports.setupDatabase = setupDatabase; 

我个人从未以这种方式尝试过,但在我看来,这可以帮助您更好地构build访问数据库的方式。 希望这有助于!

编辑作为一个CRUD的实现被请求我张贴一个与mongoose。 您可以与您正在使用的每个其他数据库进行交换

 var application_root = __dirname, express = require("express"), path = require("path"), mongoose = require('mongoose'); var app = express(); mongoose.connect('mongodb://localhost/my_database'); var Item = mongoose.model('Item', new mongoose.Schema({ text: String })); app.configure(function(){ app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(application_root, "public"))); }); app.get('/', function(req, res){ res.send('Hello World'); }); app.get('/item', function(req, res){ res.render('item', {title: "Your App"}); }); app.get('/api/items', function(req, res){ return Item.find(function(err, items) { return res.send(items); }); }); app.get('/api/items/:id', function(req, res){ return Item.findById(req.params.id, function(err, item) { if (!err) { return res.send(item); } }); }); //etc. 

所有这些CRUD操作都是针对您在您的Backbone应用程序中引入的模型,并将其与MongoDB连接起来。 您可以使用其他软件包通过使用NPM创build一个mysql查询,并安装nodejs-mysql-native ,而不是通往MongoDB的一般path,而且我发现它有时非常有用。