我现在有一些小型 Node.js / Express 应用程序正在运行,但我从未对任何数据库访问解决方案感到满意。
- 我从包含数据库访问的“胖控制器”开始;
- 我尝试使用 Mongoose 的“胖模型”,但这严重污染了具有数据库访问权限的模型;
- 我尝试了一种用 Java 实现的 DAO 模式,并将我的模型转换回值对象来移动数据,但这感觉不是很惯用。
您认为 Node.js MVC Web 应用程序的数据库访问代码在哪里?
回来ActiveRecord,一切都被原谅了。
我现在有一些小型 Node.js / Express 应用程序正在运行,但我从未对任何数据库访问解决方案感到满意。
您认为 Node.js MVC Web 应用程序的数据库访问代码在哪里?
回来ActiveRecord,一切都被原谅了。
在我看来,这实际上取决于您正在使用哪种数据库架构。使用 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 发布一个。您可以与您正在使用的所有其他数据库交换它
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 。