項目地址: https://github.com/RobinQu/datastackmysql
對開發者友好的輕量級RESTful中間件,基於koa。git
我會陸續放出一下tutorials,這篇文章純屬datastack 101,但願勾起你們的興趣。github
var datastack = require("datastack"), koa = require("koa"); var app = koa(); datastack(app, { storage: { type: "mongodb", uri: "mongodb://127.0.0.1:27017/zoo" } }); app.resource("cats"); app.resource("dogs"); app.listen(porcess.env.PORT || 8888);
https://github.com/RobinQu/datastack/blob/master/spec/ws_subscription_spec.jsredis
datastack自帶的組件便可實現將事件的CRUD操做經過廣播,在客戶端:sql
var client = new Websocket("ws://localhost:8888/books/_subscription"); client.on("message", function(data) { //json encoded string var event = JSON.parse(data); // event.type === "datastack:create" // event.data === `storeKey`s of created records });
經過datastack的notifier體系,能夠輕鬆接駁Apple APN、Google Push Service,或者其餘的sass服務(Mailgun、Urban Airship等),讓你快速實現簡潔的消息體系。mongodb
默認是利用mongo的,但相信不是每一個人都喜歡mongo。事實上,經過實現本身的Storage
類,你能夠接入任何持久化方案。json
例如,爲測試而寫的MemoryStore
: https://github.com/RobinQu/datastack/tree/master/src/storage/memory緩存
只需在建立datastack
時給定storage
屬性,sass
var koa = require("koa"), datastack = require("datastack"), MySuperStorage = require("my-super-storage"); var app = koa(); datastack(app, { storage: new MySuperStorage() });
儘管datastack
中大部分的組件均可以利用mixin的方式應用到原生的koa應用實例上,咱們也提供一個koa的子類StackApp
,它有以下優點:安全
一個簡單的例子:
var datastack = require("datastack"); var app = datastack.app({ storage: { type: "mongodb", uri: "mongodb://127.0.0.1:27017/datastack-test" } }); app.resource("book"); app.resource("author"); var port = process.env.PORT || 8888; app.listen(port, function() { console.log("server is up and running"); });
這是一個基於recluster 的封裝。假如用到了datastack中的一些高級功能(事件訂閱)等,不可避免的涉及到事件在cluster之間同步等問題。而集羣之
間的問題,遠遠不止這一個。StackCluster
是爲了解決這些目前我碰到的一些問題,以及將來架構中可能出現的問題而準備的,推薦使用。
一個完整的例子: https://github.com/RobinQu/datastack/tree/master/example/cluster
其實在koa出來以後就在計劃這個,可是寫的好沒動力。目前大部分架構已完成,如今的任務:
datastack
已經在個人我的項目中使用,但數量級還不夠證實它的穩定性。