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



我有一些小型Node.js/Express应用程序正在运行,但我从未对任何数据库访问解决方案感到满意。

  • 我从"胖控制器"开始,其中包括数据库访问
  • 我尝试过使用Mongoose的"胖模型",但这严重污染了数据库访问的模型
  • 我尝试了一种用Java实现的DAO模式,并将我的模型重新转换为值对象来移动数据,但这感觉不太习惯

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

回到ActiveRecord,一切都被原谅了。

在我看来,这实际上取决于您使用的是哪种类型的datbase arch。当使用MySQL时,我通常在控制器中使用它们,而当使用MongoDB时,我将它们放入模型中,因为这感觉更自然。老实说,NodeJS更像是一个升级的javascript,MVC就是定义。

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

然而,当使用Express时,我们通常会应用RESTful接口并使用路由来填充CRUD操作。我的应用程序从来没有这么大,这样的行为会非常大,但对于大型项目,人们可能想构建像这样的路线

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

通过将它们拆分为一个名为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;

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

编辑作为CRUD的实现请求,我发布了一个带有Mongoose的CRUD。你可以与合作的所有其他数据库交换

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连接。除了MongoDB的一般路径之外,您还可以使用其他包通过使用NPM创建mysql查询,并安装nodejs-mysql native,我发现它有时非常有用。

最新更新