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

我对node&koa很新,所以请原谅我的愚蠢。

我不知道我是否搞砸了。 但是我想和OrientDB一起使用Koa。 我可以使用Oriento连接到OrientDB(Node的模块)。 我想用Koa的发电机的力量。

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

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

据我所知,我将钩在中间件堆栈的某个地方。 如果我可以使用生成器,这将是很好的,这样我的中间件就可以等待,直到获取数据为止。 一些error handling,以及…

所有这一切说:

  • 我的假设是否正确? 或者,还有更好的方法?
  • 我必须自己做那个吗? 还是我缺less方便我所计划的模块?
  • 开始学习如何正确地做这样的事情会是一个好点子?
  • 我应该看看现有的包装为mongodb / mysql /什么和摘要?

谢谢!

我从来没有使用过东方分贝,但看着Github页面,它看起来像它提供了一个连接池,并返回承诺。 基于此,我会做这样的事情:

// 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); } 

希望这有助于

你可能想要在kkkjs上查看我的屏幕录像http://knowthen.com