资讯专栏INFORMATION COLUMN

datastack - 基于koa的RESTful框架

_ivan / 1013人阅读

摘要:项目地址对开发者友好的轻量级中间件,基于。事实上,通过实现自己的类,你可以接入任何持久化方案。假如用到了中的一些高级功能事件订阅等,不可避免的涉及到事件在之间同步等问题。而集群之间的问题,远远不止这一个。

项目地址: https://github.com/RobinQu/datastack

对开发者友好的轻量级RESTful中间件,基于koa。

我会陆续放出一下tutorials,这篇文章纯属datastack 101,希望勾起大家的兴趣。

TL;DR
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);
More fun Events subscription

https://github.com/RobinQu/datastack/blob/master/spec/ws_subscription_spec.js

datastack自带的组件即可实现将事件的CRUD操作通过广播,在客户端:

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等),让你快速实现简洁的消息体系。

Data store

默认是利用mongo的,但相信不是每个人都喜欢mongo。事实上,通过实现自己的Storage类,你可以接入任何持久化方案。

例如,为测试而写的MemoryStore: https://github.com/RobinQu/datastack/tree/master/src/storage/memory

只需在创建datastack时给定storage属性,

var koa = require("koa"),
      datastack = require("datastack"),
      MySuperStorage = require("my-super-storage");

var app = koa();
datastack(app, { storage: new MySuperStorage() });
StackApp

尽管datastack中大部分的组件都可以利用mixin的方式应用到原生的koa应用实例上,我们也提供一个koa的子类StackApp,它有如下优势:

更多API shortcut

提供对cluster的一些支持(事件消息传播等)

代码会更简洁

一个简单的例子:

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");
});
StackCluster

这是一个基于recluster 的封装。假如用到了datastack中的一些高级功能(事件订阅)等,不可避免的涉及到事件在cluster之间同步等问题。而集群之
间的问题,远远不止这一个。StackCluster是为了解决这些目前我碰到的一些问题,以及未来架构中可能出现的问题而准备的,推荐使用。

一个完整的例子: https://github.com/RobinQu/datastack/tree/master/example/cluster

项目状况

其实在koa出来之后就在计划这个,但是写的好没动力。目前大部分架构已完成,现在的任务:

写更多的测试

更多的存储方案(redis, mysql, 以及混合存储,即多级缓存)

安全认证, 目前仅有有BasicAuth方案

消息通讯
4.1 更多渠道(APN、mail)
4.2 更多底层通讯方式 (zmq, AMQ)

datastack已经在我的个人项目中使用,但数量级还不够证明它的稳定性。

贡献

当然是越多越好了,datastack里面已经有很多打开的issues了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18730.html

相关文章

  • 造轮子系列 --- 注解、插件式node.js web / restful api 框架

    摘要:是基于的插件式开发框架和平常的相比,它无需另外绑定路由集合可拓展开发简单,依照的著名依赖注入框架来制作,让开发者专注于逻辑。采用多服务多进程架构来保证服务的稳定和快速响应能力。的中间件和的中间件保持兼容。默认使用的是后续会提供。 polix是基于koa v2.5.0的IOC、插件式开发框架,和平常的Node.js Web Framework相比,它无需另外绑定路由集合、可拓展、开发简单...

    JowayYoung 评论0 收藏0
  • 最好用koa2+mysqlRESTful API脚手架,mvc架构,支持node调试,pm2部署

    摘要:基于构建的服务器脚手架这是一个基于的轻量级脚手架,支持支持使用编写。脚手架可以根据不同的环境配置不同的信息运行价值,支持开发,测试,生产环境的不同参数配置。 #基于webpack构建的 Koa2 restful API 服务器脚手架 这是一个基于 Koa2 的轻量级 RESTful API Server 脚手架,支持 ES6, 支持使用TypeScript编写。 GIT地址:https...

    xiongzenghui 评论0 收藏0
  • 基于JavaScript简单解释器实现(一)——表达式语法树生成

    摘要:语法树这一章主要是完成语法树的生成。其中由于函数声明部分过于简单,没必要生成语法树,打算留到下一章一起处理。主循环结束后数据栈中的第一位元素则为语法树。这是最后生成的语法树总结总之,语法树就算是生成完毕了。 前言 这个系列是关于CodeWars上的一条1Kyu题:Simple Interactive Interpreter。也就是实现一个简单的交互式解释器。题目地址:http://ww...

    DataPipeline 评论0 收藏0
  • 基于JavaScript小型Three-Pass编译器实现

    摘要:也因此,语法树生成过程异常简单,基本是和波兰表达式生成没区别了。这个没啥好讲的了,就是波兰表达式的生成略改而已,改动部分包括多了值栈和参数列表。其中立即量和参数这俩个分别是将数字和参数放入寄存器后压栈。其他的操作则是首先分别执行子节点。 前言 昨天完成了codewars上的1级题简单解释器实现,今天突发奇想上去看看总共有多少1级题,然后发现总共也只有三题。而且,这三题都是编译器解释器相...

    lansheng228 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<