这是之前写一个项目用到的小工具,给 API 服务器自动生成 Restful 风格的接口。最近整理出来,写了点测试就放 github 上了。支持的 HTTP 方法有 GET、POST、PUT、PATCH、DELETE,实现的功能其实也很简单,就是基本的 CURD,只不过给标准化了而已。当然还保留 Express 的中间件,如果标准化操作不符合要求可以拦截或进一步操作。
详细的介绍还是看 README 吧,这里贴一下基本用法。
// 在使用前先建立好 express app 和需要用到的 mongoose model
// 引入 Restal 类
const Restal = require('restal')
// 使用 mongoose model 创建一个 Restal 实例,并挂在到对应的 resource uri 上,就会生成对应的 api
const postApis = new Restal(post, '/post')
// 把 api 注入到 express app 中(或者说把路由导入到 express app 里)
postApis.inject(app)
当然,你也可以通过 express 中间件修改默认处理
// ----+----+----+---------+----+----+----
// preHandle -> ... | f2 | f1 | handler | f1 | f2 | ... <- postHandle
// ----+----+----+---------+----+----+----
// 添加预处理中间件拦截或预处理请求
postApis.preHandle('get', (req, res, next) => {
const postModel = postApis.model
const postUri = postApis.uri
// 进行处理,例如权限验证等
// 如果不调用 next()则拦截并阻止了默认处理
// 但你需要自己响应请求
next()
})
// 添加后处理中间件对数据进行后处理
postApis.postHandle('get', (result, req, res, next) => {
const postModel = postApis.model
const postUri = postApis.uri
// 进行处理,例如数据处理等
// 如果添加了后处理中间件,默认处理将不响应请求,并
// 通过 result 参数向后处理中间件传递原响应结果,因此你
// 需要自己响应请求
res.status(200).send(result)
})
Github 地址:https://github.com/Siubaak/restal
代码一般,默默的求 star。
1
EricJia 2017-09-27 10:42:36 +08:00
之前写的
```js /** * @author eric * @version 1.0.0 */ // const allow = ['index', 'show', 'create', 'update', 'delete']; export default class Base { constructor (router) { this.router = router } resources (resource = '', controller = {}, functions = []) { const router = this.router const resolve = function (req, res) { res.send('not opened') } const { index = resolve, show = resolve, create = resolve, update = resolve, del = resolve } = controller router.get(resource, functions, index) router.get(`${resource}/:id`, functions, show) router.post(resource, functions, create) router.put(`${resource}/:id`, functions, update) router.patch(`${resource}/:id`, functions, update) router.delete(`${resource}/:id`, functions, del) return this } } ``` |