【问题标题】:Koa: What is the most sensible way to connect to a database without an existing wrapper?Koa:在没有现有包装器的情况下连接数据库最明智的方法是什么?
【发布时间】:2014-12-13 15:48:39
【问题描述】:

我对node和koa很陌生,所以请原谅我的愚蠢。

我不确定我是否搞砸了。但我想将 Koa 与 OrientDB 一起使用。我可以使用 Oriento(Node 的模块)连接到 OrientDB。我想使用 Koa 的生成器的力量。

由于我的 OrientDB 数据库中的数据与我在我的应用程序中使用的对象相关,我想实现模型(当然)。所以我想连接到数据库的部分会涉及到。

假设我有一个名为“Task”的模型,那么我希望它公开几个方法和 getter/setter。所以 Task.find();应该从 OrientDB 数据库中获取所有任务

据我了解,我会将其挂在中间件堆栈的某个位置。如果我可以使用生成器,这样我的中间件会一直等到它使用 yield 取回数据,那就太好了。一些错误处理也会很好......

说了这么多:

  • 我的假设正确吗?或者,还有更好的方法?
  • 我必须自己做吗?或者我是否缺少促进我的模块 规划?
  • 什么是开始学习如何正确执行此类操作的好点?
  • 我是否应该只查看 mongodb/mysql/whatever 的现有包装器并从中抽象出来?

谢谢!

【问题讨论】:

    标签: javascript node.js orientdb koa oriento


    【解决方案1】:

    我从未使用过 orient-db,但查看 github 页面,它似乎提供了一个连接池并返回了 Promise。基于此,我会做这样的事情:

    // in utils/oriento.js or similar
    // instantiate it once and share in multiple places(models), since it offers 
    // connection pooling
    var Oriento = require('oriento');
    var server = Oriento({
      host: 'localhost',
      port: 2424,
      username: 'root',
      password: 'yourpassword'
    });
    var db = server.use({
      name: 'mydb',
      username: 'admin',
      password: 'admin'
    });
    module.exports = db;
    

    那么对于模型:

    // models/item.js 
    var db = require('../utils/oriento.js');
    
    var Item = function(props){
    
    };
    
    Item.findById = function(id){
        // db.query returns a promise
        return db.query('select from OItem where id=:id', {
          params: {
            id: id
          },
          limit: 1
        });
    
    }
    // add getters, setters, find etc...
    module.exports = Item;
    

    然后在控制器中:

    // server.js or wherever
    
    var Item = require('./models/item');
    
    app.get('/:id', function *(){
        var id = this.params.id;
        this.body = yield Item.findById(id);
    }
    

    希望这会有所帮助

    您可能想在http://knowthen.com 上查看我在 koajs 上的截屏视频

    【讨论】:

    • James 这并没有考虑打开/关闭多个连接。
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2019-02-19
    • 2016-07-13
    • 2012-07-11
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    相关资源
    最近更新 更多