
node-odata 可以让你轻松创建 REST API, 并能使用 OData 协议的格式进行数据的查询. 它让你可以更方便的创建 API 服务, 使你更专注于业务逻辑的处理.
OData 全称开放数据协议(Open Data Protocol), 是一个用于 web 的数据访问协议. OData 提供了一个统一的 CRUD (create, read, update, and delete) 操作来查询和维护数据集.
node-odata 同时结合了 OData 强大的数据查询能力以及 NodeJS 高并发能力的优势, 使开发者能快速的创建一个高性能并支持各种复杂查询的 REST API.
在常规的 REST 框架中, 仅仅提供了 REST 风格的 CRUD 操作. 开发者不的不对每一个资源都手动添加一些公共功能, 如排序/分页等, 甚至在复杂的业务场景中, 开发者不的不一次次根据业务需求制定一些特定的复杂查询, 这都极大的浪费了人力资源. OData数据访问协议很好的解决了这一问题. 它定义了$filter, $orderby, $select等一系列关键字来进行统一的筛选, 排序, 分页等操作. 极大的减轻了开发者的负担, 提高了生产力.
反观 OData 社区, 目前 node-odata 是唯一一款基于 NodeJS 的 OData 实现. 与其它编译型语言的 OData 实现相比, 它运行更加高效, 部署更加方便, 编写更加简单 (最短只需3行代码即可初始化一个 OData 服务).
OData最大的特点就是他完全暴露的数据接口, 服务端只需要几行代码就能让客户端实现随心所欲的查询, 您可以试试:
很酷炫, 是吗? 你还可以任意组合查询条件, 以实现复杂查询. 比如:
node-odata 的运行需要依赖于 NodeJS 和 MongoDB, 在安装了依赖项之后, 运行以下命令即可:
$ npm install node-odata 这里我们讲创建并运行一个最简单的 OData 服务.
安装完成后, 新建 index.js 文件并输入:
var odata = require('node-odata'); odata.set('db', 'mongodb://localhost/my-app'); odata.resources.register({ url: '/books', model: { title: String, price: Number } }); odata.listen(3000); 保存后输入以下命令即可启动 OData 服务:
$ node index.js 它将自动注册以下路由:
GET /odata/books GET /odata/books/:id POST /odata/books PUT /odata/books/:id DELETE /odata/books/:id (点击 这里 查看完整文档)
(查看 GitHub Page 请点击 这里)
1 ZackYang OP 该开源项目目前已被 OData 官网 ([odata.org](http://www.odata.org/libraries/))收录 |
2 hahastudio 2015-01-13 16:26:37 +08:00 @livid 要不要考虑一下修改配色的事情呢 |
3 learnshare 2015-01-13 16:33:05 +08:00 代码颜色... |
4 ZackYang OP |
5 coolicer 2015-01-13 17:24:59 +08:00 哈哈哈哈哈 支持一个先 |
6 vinthony 2015-01-13 23:31:55 +08:00 好赞顶 |
7 Livid MOD PRO @hahastudio 收到。确实需要修改这里的配色。 |
8 Livid MOD PRO |
10 shuson 2015-01-14 11:58:50 +08:00 很不错的lib,准备自己的项目上试试先 |
11 makuta 2015-01-19 10:56:21 +08:00 如何制定collection啊 |
12 ZackYang OP @makuta 如介绍中的 model: { title: String, price: Number } 这就是collection的定义, 你可以增加任意字段, 包括复杂类型. 这里有几个example可以看看: https://github.com/TossShinHwa/node-odata/tree/master/examples |
13 makuta 2015-01-21 17:01:46 +08:00 为什么 mongo 里 collection的名字和 register里的url 不一样 总会多一个s 怎么解决collection 不要s |
16 ZackYang OP @makuta 已修复这个问题, 请使用 `npm update node-odata` 更新到新版本. mongoose 是 mongodb 的一个 ORM, 在 node-odata 内部使用, 主要用于保障 model 存储时, 其值符合数据结构的格式. 详见: https://github.com/TossShinHwa/node-odata/issues/10 |
17 makuta 2015-01-21 17:34:12 +08:00 太赞了 |
21 ZackYang OP @makuta 目前只打算做其他数据库的Adapter, 比如MySQL和PostgreSQL. 你说的多数据库是指多个 MongoDB 吗? 如果那样建议直接开2个服务搞定, 既然数据库都是分离的, 那业务逻辑等也应该全部分离才对. 中间要通信的话直接用 REST 搞定. |
22 binarymann 2015-03-26 10:55:43 +08:00 @ZackYang 请教下Zack,我对nodejs及mongo还很生疏... 我安装好了mongo,将它跑了起来 `C:\"Program Files"\MongoDB\Server\3.0\bin\mongod.exe` 然后copy了范例 index.js ``` var odata = require('node-odata'); odata.set('db', 'mongodb://localhost/my-app'); odata.resources.register({ url: '/books', model: { title: String, price: Number } }); odata.listen(3000); ``` node index.js 后被抛了个error ``` base.js:246 throw message; ^ TypeError: Cannot read property 'length' of undefined at processResults (C:\Users\i314323\node_modules\node-odata\node_modules\mongoosenode_modules\mongodb\lib\mongodb\db.js:1581:31) ``` |
23 ZackYang OP @binarymann ``` mkdir test cd test npm install node-odata vim index.js (添加示例测试代码) node index.js ``` 刚测试了下, 使用上面代码 + Mongo 3.x 应该是没有问题的. 请问您的 NodeJS 版本具体是? |
24 binarymann 2015-03-26 14:48:34 +08:00 |
25 ZackYang OP |