1

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

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

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

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

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

说了这么多:

  • 我的假设正确吗?或者,还有更好的方法?
  • 我必须自己做这一切吗?还是我缺少有助于我计划的模块?
  • 开始学习如何正确地做这样的事情有什么好处?
  • 我应该只查看 mongodb/mysql/whatever 的现有包装器并从中抽象吗?

谢谢!

4

1 回答 1

2

我从未使用过 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 上的截屏视频

于 2014-12-13T22:50:06.113 回答