Nodejs datastack - 基于koa的RESTful框架
Nodejs datastack - 基于koa的RESTful框架
项目地址: 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
已经在我的个人项目中使用,但数量级还不够证明它的稳定性。
贡献
Nodejs datastack – 基于koa的RESTful框架
项目地址:
简介:
datastack 是一个轻量级的 RESTful 中间件,基于 Koa 框架。它旨在为开发者提供一种简单的方式来构建 RESTful API,并且内置了一些强大的功能,如事件订阅和数据存储。
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(process.env.PORT || 8888);
这段代码展示了如何初始化一个 Koa 应用,并将其与 datastack 集成。我们配置了 MongoDB 作为存储引擎,并注册了两个资源 cats
和 dogs
。最后,启动服务器监听端口。
更多功能 - 事件订阅:
datastack 提供了事件订阅功能,允许你在客户端实时接收 CRUD 操作的通知。示例如下:
var client = new WebSocket("ws://localhost:8888/books/_subscription");
client.on("message", function(data) {
// 解析接收到的消息
var event = JSON.parse(data);
// 检查事件类型
if (event.type === "datastack:create") {
console.log("新记录已创建:", event.data);
}
});
这段代码展示了如何通过 WebSocket 订阅书籍资源的事件,并处理新创建的记录通知。
数据存储:
默认情况下,datastack 使用 MongoDB 作为存储引擎。如果你需要使用其他存储方案,可以通过实现自定义的 Storage
类来接入。例如,使用内存存储(MemoryStore):
var koa = require("koa"),
datastack = require("datastack"),
MemoryStore = require("my-super-storage");
var app = koa();
datastack(app, { storage: new MemoryStore() });
StackApp:
除了直接使用 datastack 初始化 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");
});
StackCluster:
对于需要处理集群环境的应用,可以使用 StackCluster
,它基于 recluster 进行封装,能够更好地管理集群中的事件同步和其他问题。
项目状况:
目前,datastack 已经具备了基本的功能,并在我的个人项目中得到应用。接下来的任务包括增加更多测试、扩展存储方案(如 Redis、MySQL)、完善安全认证和消息通信功能。
贡献:
非常欢迎贡献代码或提出 issue 来帮助改进 datastack。
赞一个 好像依赖好多
赞
Nodejs datastack – 基于koa的RESTful框架
项目地址: datastack
简介: datastack
是一个基于koa的轻量级RESTful中间件框架。它提供了多种特性,如事件订阅、数据存储、多节点支持等,使得开发RESTful API变得更加便捷。
示例代码
下面是一个简单的示例,展示了如何使用datastack
创建一个基于koa的应用,并添加资源(resource):
const datastack = require("datastack");
const Koa = require("koa");
const app = new Koa();
// 配置datastack使用MongoDB作为数据存储
datastack(app, {
storage: {
type: "mongodb",
uri: "mongodb://127.0.0.1:27017/mydatabase"
}
});
// 添加资源
app.resource("cats");
app.resource("dogs");
// 启动服务器
const port = process.env.PORT || 8888;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
更多功能
-
事件订阅
-
datastack
支持事件订阅功能,可以通过WebSocket接收数据库操作的实时更新。客户端代码示例如下:const WebSocket = require('ws'); const ws = new WebSocket('ws://localhost:8888/cats/_subscription'); ws.on('message', (data) => { const event = JSON.parse(data); if (event.type === 'datastack:create') { console.log('New cat created:', event.data); } });
-
-
自定义数据存储
-
如果不使用默认的MongoDB,可以通过实现自己的存储类来连接其他数据源。例如,使用Redis作为存储:
const datastack = require("datastack"); const Koa = require("koa"); const RedisStore = require("./path/to/redis-store"); const app = new Koa(); datastack(app, { storage: new RedisStore() }); app.resource("books"); app.resource("authors"); const port = process.env.PORT || 8888; app.listen(port, () => { console.log(`Server is running on port ${port}`); });
-
-
StackApp 子类
-
datastack
提供了一个koa子类StackApp
,它提供了更多的API快捷方式和集群支持。const datastack = require("datastack"); const app = datastack.app({ storage: { type: "mongodb", uri: "mongodb://127.0.0.1:27017/mydatabase" } }); app.resource("book"); app.resource("author"); const port = process.env.PORT || 8888; app.listen(port, () => { console.log(`Server is running on port ${port}`); });
-
项目状态
- 当前
datastack
正在不断完善中,包括增加更多的存储选项、安全性增强和消息通信支持。 - 项目已在作者的个人项目中使用,但还需要更多的测试和验证以确保稳定性和可靠性。
贡献
- 欢迎大家参与贡献,提出问题和建议,帮助完善
datastack
。
以上是关于datastack
的基本介绍和使用方法,希望能帮助你快速上手。