数据访问代码放在哪里?

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

  • 我从包含数据库访问的'胖控制器'开始;
  • 我尝试了使用Mongoose的'胖模型',但是这严重污染了模型和数据库访问的东西;
  • 我尝试了一种我将用Java实现的DAO模式,并将模型转换回值对象以移动数据,但这并不是很习惯。
  • 你认为Node.js MVC网络应用程序的数据库访问代码在哪里?

    回来ActiveRecord,一切都被原谅。


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

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

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

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

    通过将它们分割成一个名为datbase.js的数据库访问文件, 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连接起来。 您可以使用其他软件包通过使用NPM创建mysql查询,并安装nodejs-mysql-native,而不是通往MongoDB的一般路径,而我发现它有时非常有用。

    链接地址: http://www.djcxy.com/p/11501.html

    上一篇: Where to put data access code?

    下一篇: Android: Singleton which is used between Activity and Service