UNPKG

routefilter.emb

Version:

路由过滤中间件 ,注入在 request 一组 过滤器。可实现请求过滤器,和在过滤器中实现请求和返回,实现RMVC中把请求脱离出去

262 lines (180 loc) 6.09 kB
# route-filter.emb > Package Name :route-filter.emb > > Description:基于浏览器环境 **sme-router 为例**开发的路由中间件, > > 可在路由请求中**注入请求过滤**,实现过滤和请求处理; > > 也可作为公共执行器 **进行AJAX请求层分离** ## Description 他把函数变成Promise函数,在浏览器环境下执行全局函数的调用。 他把函数注入在Router 的request对象中 异步调用 Promise 函数 实现过滤。 他有几个优点和尝试: 前端无next 方法的替代方案。 分离Ajax 请求的实现方案。 使用场景 基于浏览器的 RMVC 构建过程过于复杂时, 我们可以使用他把**Ajax 请求从 Controller 中脱离**出去, 实现新的尝试 ARMVC ( Ajax Router Model View Controller ); ## Install 安装 ```javascript npm install routefilter.emb -D import registerExecutor from 'routefilter.emb' // or 浏览器环境 registerExecutor() ``` ## USE 使用 #### Quick to use 快速使用 ##### 引入 ```javascript const registerExecutor= require('routefilter.emb') ; ``` > Tip: The browser environment does not need to be require. > > 浏览器环境不需要引入,可直接调用 registerExecutor 方法 ##### 执行器 & 使用 > 模拟执行器 > > //除非页面刷新自动再次调用 改变保存的 > 执行器 请设置返回事的错误捕捉 否则调用是await 将无法获取结果 ,或者只能使用 try来 错误捕捉 > //适用页面不刷新单次验证环境 ###### 普通执行器 ```javascript function Filter2(data, res) { console.log('2.', data, res) return Date.now() } ``` ###### 普通执行器调用 > 函数中建议使用 asynv await 调用 获取结果 > > 路由中 执行器 会挂载 在 request 对象中 ```javascript Executor.Filter2().then((res) => console.log(res)); // OR 路由中 执行器调用 let result= await req.Filter2(data) ``` ###### 自执行执行器 _ 下滑线开头 > 自执行执行器 页面加载时会自动执行并保存结果会 > > 页面刷新自动再次调用 改变保存的结果 > > 适用页面不刷新单次验证环境 ```javascript // 自执行执行器 _ 下滑线开头 function _Filter1(data) { console.log('1', data) return Date.now() } ``` ###### 自执行执行器 结果获取 &&调用 > 注意:获取的结果 是 **注册时就已经执行并保存的** > **页面不刷新** 任何时候**获取的结果都是相同** > > **再次调用**获取新的结果只是返回新的结果 也**不会更新自动执行的结果** ```javascript //结果获取 let result= await Executor._Filter1_ //再次调用获取新的结果 此调用不会影响自动执行后的结果 let result =await Executor._Filter1() ``` ```javascript //如果没看懂 ,请看例子 Executor._Filter1_.then((res) => console.log(res)); //1566569316591 setTimeout(() => { Executor._Filter1_.then((res) => console.log(res)); //结果相同 1566569316591 }, 1000) ``` ##### 注入 > 请注意注册执行器 ,尽量不要执行器重名 根据过滤器函数名注入 > > 全局注入 脱离路由 全局调用 ###### 全局多个注入 Array - 注入多个 脱离路由 ```javascript // 注册全局 执行器 多个 registerExecutor([_Filter1, Filter2],true); ``` ###### 全局单个注入 Function - 注入单个 脱离路由 ```javascript // 注册全局过滤执行器 注意: 重复注入 自动执行执行器 会多次执行 registerExecutor(_Filter1,true); ``` ###### 路由注入 > 与全局注册语法相同 > > 在路由中注人的执行器 在路由执行后 全局也可以调用 > > request.Executor[执行器] 与全局调用 方法性质一致 ```javascript router.use(registerExecutor(_Filter1)) ``` #### Demo 例子 FRMVC 增加过滤请求层的用法 ##### FilterExecutor 滤器的编写 ```javascript Executor=[ userSignIn(data) { $.ajax({ type: "get", url: "/users/issignin", data, dataType: "json", success:(res)=>{return res}, error:(res)=>{return res } }) }, // 自执行执行器 _ 下滑线开头 _Filter1(data) { console.log('1', data) return Date.now() } ] export default Executor ``` ##### Router注入过滤器 ```javascript import userFilter from './filter/userFilter.js' //用户过滤器 . 过滤器层 const router = new SMERouter('router-view', 'hash') // 脱离路由 注册全局过滤执行器 多个 registerExecutor(FuserFilter.userSignIn,true); //OR 路由注册 router.use(registerExecutor(userFilter.userSignIn)) ``` ##### Controller 使用过滤器 ```javascript //路由控制器调用 class Controller { async render(req, res, next) { //执行全局执行器 获取注册时自执行的数据 let result1 = await Executor._Filter1_; //再次执行 获取新的数据 let result2 = await Executor._Filter1(); //调用 用户验证过滤执行器 let isSingIn = await req.Executor.userSignIn(Data); if (isSingIn) { //如果验证成功 ,渲染 res.render("Rander Page") } } } export default new Controller() ``` > Author:吃火星的宝宝 > > GitHub: [embaobao](https://github.com/embaobao/) > > [packageGit Hub](https://github.com/embaobao/route-filter.emb-packages) > > Web :[个人网站](https://embaobao.cn) > > Thank you for using ! > 谢谢您的使用! > > Hope you can put forward more opinions! > > 希望您可以提出更多意见! > > [邮箱 Emil :chihuoxingdebaobao@163.com](chihuoxingdebaobao@163.com) > > [我的意见箱 My suggestion box]( https://embaobao.cn)