Koa:在没有现有包装器的情况下连接数据库最明智的方法是什么?

时间:2014-12-13 15:48:39

标签: javascript node.js orientdb koa oriento

我对节点& koa,请原谅我的愚蠢。

我不确定我是否搞砸了。但我想将Koa与OrientDB一起使用。我可以使用Oriento(Node的模块)连接到OrientDB。而且我想使用Koa发电机的强大功能。

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

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

据我所知,我会把它挂在中间件堆栈的某个地方。如果我可以使用生成器以便我的中间件等待直到它使用yield来获取数据,这将是很好的。一些错误处理也会很好......

尽管如此:

  • 我的假设是否正确?或者,还有更好的方法?
  • 我自己必须这样做吗?或者我错过了能够促进我的工作的模块 规划?
  • 开始学习如何正确地做这样的事情会有什么好处?
  • 我应该只看一下mongodb / mysql /的现有包装器以及它的摘要吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我从来没有使用过orient-db,但是看看github页面看起来它提供了一个连接池并返回了promises。基于此我会做这样的事情:

// 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上的截屏视频