详解IWinter 一个路由转控制器的 Nodejs 库


Posted in NodeJs onNovember 15, 2017

IWinter 是一个路由转控制器的 node 库,只解决一个问题:为了让使用者以更优雅的姿势进行路由的编写。支持在 Express 和 Koa 中使用。

项目地址:https://github.com/yvanwangl/iwinter

简介:

最近在学习使用 Typescript ,打算把以前写的博客管理后台用 Typescript 进行全面重构,在重构服务端代码时接触到使用了 Typescript 的装饰器功能。可以用装饰器对路由进行一层包装,然后就可以这样编写路由:

import {Path, GET, POST, PathParam, BodyParam} from 'iwinter';

@Path('/api/orders')
class OrdersController {

  @GET
  @Path('/:name/:id', (ctx, next)=> ~~ctx.params.id > 20)
    getAllOrders(@PathParam('id') id: number, @PathParam('name') name: string){
    return [{
        id: id, name, content: 'test', author: 'test', comments: []
      }];
  }

  @POST
  @Path('/add')
  addPost(@BodyParam('order') order: object){
    return order;
  }
}

export default OrdersController;

由于工作中会使用用 Java 编写控制层代码(Spring MVC 的控制层代码),所以看到这样的代码简直太亲切了。而且相较于以前的路由编写方式更清晰,更方便维护,所以就将原来的的代码进行了改造。我使用之后发现非常好用,我就想让更多的人都可以使用,所以就诞生了 IWinter 这个库。IWinter 就是将各种装饰器或装饰器工厂函数进行封装然后暴露出一些 API 供大家使用。从此就告别这样编写路由了 ;)

//app.js
...
let users = require('./routes/users');
let orders = require('./routes/orders');

app.use('/api/users', users);
app.use('/api/orders', orders);
...

//routers/orders.js
...
router.route('/')
  .get(function (req, res, next) {
    let {page, timeRange, customerId, orderNumber} = req.query;
    let limit = constants.PAGE_SIZE;
    let skip = (page - 1) * limit;
    let currentUser = global[Symbol.for('currentUser')];
    let queryCondition = {
      userId: currentUser['_id']
    };
      ...

谁适合使用 IWinter:

  1. Nodejs 用户
  2. Typescript 用户
  3. Express / Koa 用户

IWinter 安装 及 使用

npm install --save iwinter
import IWinter from 'iwinter';

Koa 中如何使用:

import * as Router from 'koa-router';
...
app.use(new IWinter({
    engine: 'koa',
  router: new Router(),
  dir: path.join(__dirname, 'controller')
}).controller());
...

Express 中如何使用:

import * as express from 'express';
let app = express();
let router = express.Router();
...
new IWinter({
  engine: 'express',
  router: app,
  dir: path.join(__dirname, 'controller'),
    prefix: ''
}).controller();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
用nodejs实现PHP的print_r函数代码
Mar 14 NodeJs
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
Sep 26 NodeJs
nodejs教程之环境安装及运行
Nov 21 NodeJs
浅谈Nodejs观察者模式
Oct 13 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
nodejs调取微信收货地址的方法
Dec 20 NodeJs
nodejs 生成和导出 word的实例代码
Jul 31 NodeJs
NodeJS如何实现同步的方法示例
Aug 24 NodeJs
NodeJS 实现多语言的示例代码
Sep 11 NodeJs
nodejs+express最简易的连接数据库的方法
Dec 23 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 #NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 #NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 #NodeJs
nodejs中art-template模板语法的引入及冲突解决方案
Nov 07 #NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 #NodeJs
浅谈NodeJs之数据库异常处理
Oct 25 #NodeJs
详解使用PM2管理nodejs进程
Oct 24 #NodeJs
You might like
php打印输出棋盘的实现方法
2014/12/23 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
JavaScript实现全选取消效果
2017/12/14 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
vuex提交state&&实时监听state数据的改变方法
2018/09/16 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
2018/11/14 Javascript
JS实现简单tab选项卡切换
2019/10/25 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
详细介绍Python中的偏函数
2015/04/27 Python
python友情链接检查方法
2015/07/08 Python
Python算法应用实战之栈详解
2017/02/04 Python
python九九乘法表的实例
2017/09/26 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
python实现简单tftp(基于udp协议)
2018/07/30 Python
opencv3/C++ 平面对象识别&透视变换方式
2019/12/11 Python
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
自我鉴定总结
2014/03/24 职场文书
委托书样本
2014/04/02 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
亲情作文之母爱
2019/09/25 职场文书
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL