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