water-pit
水沟, 基于express 4.x的 Restful路由映射
Install
npm install water-pit --save
Getting Start
路由映射
路由映射关系:
path = require 'path'module.exports = cwd: pathjoin __dirname'biz' maps: baseUrl: '/api' map: path: '/A' biz: 'A' methods: DELETE: false ... ... filter: path: '/api/*'# ignore: #支持string和正则表达式 biz: 'A-filter'
cwd
表示业务逻辑的根目录, 请求的最终业务逻辑是 path.resolve(cwd, bizMap.biz) bizMap为map中的元素, 如上述配置请求的是 path.join(__dirname, 'biz', biz)这个业务逻辑
baseUrl
基础访问路径, 映射到客户端的 最终路径是 path.join(baseUrl, bizMap.path) 如上述配置 客户端端需访问/api/A 才能映射到biz逻辑
map
路由映射关系, 数组。 path 访问路径(注意实际路径!!!会!!!加入baseUrl构成) biz 业务逻辑名字(文件名) method restful类型映射 完整的如下:
methods: GET: truePUT: truePOST: trueDelete: trueALL: true
上述值为默认值, 如需要禁止掉某种 类型 设置为false即可。 每种访问类型,对应的是业务逻辑biz相关的方法。 如GET默认调用业务逻辑的get, POST默认调用biz的post 等。
当然你也可以指定某个访问类型调用指定的方法如:
GET调用业务逻辑的getAll
, PUT调用update
, 其他使用默认函数映射
methods:{ GET: 'getAll', PUT: 'update'}
Filter
过滤器.放在所有请求前面.数组
path 数组. 访问路径
ignore
数组.在匹配的路径里面忽略哪些路径. 可选
支持string和正则表达式,为string时,常用 === request.path
来判断是否护绿.
biz 数组或单个元素 业务逻辑名字(文件名)
biz业务逻辑必须满足如下结构
= ... next orBaseFilter = require'water-pit'BaseFilter # 未在Filter中进行定义,那么就会调用该类的all函数.因此all是必须的.你可以自己实现或者继承BaseFilter ####这样的写法的话这里必须继承BaseFilter. 如果不继承,则需要实现all方法.#Filter这样的写法,Water-pit会帮你实现,当拦截的是GET请求时,访问get方法,POST去请求时,访问POST.#如果该请求类型未在Filter中进行定义,那么就会调用该类的all函数.因此all是必须的.你可以自己实现或者继承BaseFilter### extend BaseFilter : -> : ... next ... #如果没有继承BaseFilter,那么这个函数是必须的 : next
不管上述哪种写法,除非你确定请求不需要走到下个拦截器或者业务逻辑, 那么一定不要提前写出response流并且在函数执行末尾调用next()方法, 让request请求进入到下一个阶段
业务逻辑
业务逻辑需要遵循一定的规范.如下:
moduleexports = { ... } { ... } { ... } { ... } { ... }
也就是必须包含上述方法。上述的request, respone, next都与express中router函数中的相同 (提示:你可以通过继承来避免每个类都必须产生上述函数)
如果你使用coffee那么实现非常简单:
Base = require'water-pit'Base :->moudle.exports =
Base默认帮你实现了CURDA方法,当然,以上默认实现的方法都是以404为返回结果
Page 渲染静态模板
page: context: pathjoin __dirname'render' #上下文数据所在文件夹 path: '/static/:page'#路径 /static/:context/:template/:page 默认情况使 page == template = context template: pathjoin __dirname'template' #模板位置 helper: require'xxxxx' #模板helper 可选配置 errorHandle: require'xxx' #错误处理 可选配置
@params context
渲染器上下文的根目录. 函数必须符合如下标准:
= ... #cb 上下文回调 #data 提供编译模板所需要的数据 必须执行 cberrordata #注: req 以上下文的方式提供, 该函数内 this == req
将模板的上下文传入回调函数.
@params path
需要渲染模板的request请求路径
req.params中
context 用来指定上下文获取函数, 可选, 当不存在时 , context = page
template 用来指定渲染哪个模板文件(不用带后缀)
page是必须的 用来描述渲染url, 同时当context, template缺失时,用来给context, template赋值
@params template
用来指定模板文件所在的文件夹
@params helper
用来指定自定义模板助手. 模板助手必须满足以下标准
= HandlebarsregisterHelper"A" xxx HandlebarsregisterHelper"B" xxx ...
@params errorHandle
当context
上下文获取函数出错时, 调用了 cb(error)
那么该errorHandle会执行,
他必须满足一下标注:
# error 为context传过来的错误消息. = ... responsesend somethings
改参数为可选参数,如果没有设置,那么发生错误 默认发送503 http status code.
Demo
express = require 'express'Waterpit = require'waterpit'Waterpit RouterMap = cwd: pathjoin __dirname'biz' maps: baseUrl: '/api' map: path: '/employee' biz: 'employee' methods: delete: false app = expressrouter = expressRouterwater = routerRouterMapappuse'/'routerapplisten3000
具体示例请查看src/sample文件夹
Test
npm test
Test Result:
/src/converage/Icov-report/index.html
LICENSE
MIT
Suggestion and issue
欢迎 在issue处提出任何新功能 或者bug 请求
Histroy
1.1.0 该版本不兼容以前的config设置包括render设置
- 增加模板渲染时的错误handle.
1.0.1 该版本为兼容版本
修改routeMap 规则为数组,可以设置多个前缀开始的biz
0.0.8
增加静态模板渲染数据函数的上下文为session
0.0.5
增加静态模板渲染, 修改sample
0.0.4
增加filter配置.修改sample
0.0.1 基本功能完善
0.0.2 bug修复 修复route-map的属性读取错误