albatrosary's blog

UI/UXとエンタープライズシステム

TEAN(TingoDB, Express, Angular, Node.js)という構成?

以前のブログでMEANスタックについて書き、色々なところで話題になりそれなりによかったかなと思っているところです。MEANは、MongoDB、Express、Angular、Node.jsの頭文字からこう呼ばれていますが、詳しくはブログを読んで下さい:

albatrosary.hateblo.jp

MongoDBっぽいTingoDB

MEANスタックを教育等で利用する場合ですが、どうもMongoDBのインストールとか設定がちょっと手間かかり何か別のものをという話。

www.tingodb.com

TingoDBはMongoDBのようなインターフェースをもったNoSQLです。サイトにもあるサンプルで比較するといいですが、

MongoDBの場合:

var Engine = require('mongodb'),
      assert = require('assert');

var db = new Engine.Db('test', new Engine.Server('locahost', 27017));
var collection = db.collection("batch_document_insert_collection_safe");
collection.insert([{hello:'world_safe1'}
  , {hello:'world_safe2'}], {w:1}, function(err, result) {
  assert.equal(null, err);

  collection.findOne({hello:'world_safe2'}, function(err, item) {
    assert.equal(null, err);
    assert.equal('world_safe2', item.hello);
  })
});

TingoDBの場合:

var Engine = require('tingodb')(),
      assert = require('assert');

var db = new Engine.Db('/some/local/path', {});
var collection = db.collection("batch_document_insert_collection_safe");
collection.insert([{hello:'world_safe1'}
  , {hello:'world_safe2'}], {w:1}, function(err, result) {
  assert.equal(null, err);

  collection.findOne({hello:'world_safe2'}, function(err, item) {
    assert.equal(null, err);
    assert.equal('world_safe2', item.hello);
  })
});

というようにほぼ同じように記述することができます。

TingoDBのインストール

TingoDBのインストールには面倒なことは一切なく、npmでインストールするだけでpackage.jsonに書き込みたいなら--save-devとします。

$ npm install tingodb

YEOMANジェネレータ

MEANスタックのYEOMANジェネレータといえば、angular-fullstack ですが

https://www.npmjs.com/package/generator-angular-fullstack

TingoDBを使ったTEAN(?)は無いので自分で作りました。

https://www.npmjs.com/package/generator-angular-eggs

このジェネレータはAngular1系、Angular New Router, TingoDB(like MongoDB), Expressの構成を取っています。angular-fullstackのひよっこにもなっていないのでeggを使っています。e:express, g:Angular, g:Angular New Routerでもあるのですが、sが…。

最後に

ささっとMEANスタックっぽい構成を試したい方はMongoDBの代わりにTingoDBを使ってみるのも良いかと思います。ちなみにgenerator-angular-eggsですが今は

  • Angular 1.4.5
  • Angular New Router
  • Bootstrap v4
  • TingoDB

を使っています。