详解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代码实现计算交社保是否合适
Mar 09 NodeJs
nodejs调用cmd命令实现复制目录
May 04 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
nodejs基础知识
Feb 03 NodeJs
详解NodeJS框架express的路径映射(路由)功能及控制
Mar 24 NodeJs
详解nodeJS之路径PATH模块
May 31 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
NodeJS安装图文教程
Apr 19 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 NodeJs
Node.js实现爬取网站图片的示例代码
Apr 04 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/04/21 PHP
php遍历类中包含的所有元素的方法
2015/05/12 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
Js 本页面传值实现代码
2009/05/17 Javascript
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
Python实现基于HTTP文件传输实例
2014/11/08 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python找出最小的K个数实例代码
2018/01/04 Python
详解django.contirb.auth-认证
2018/07/16 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
应聘医药销售自荐书范文
2014/02/08 职场文书
运动会表扬稿
2015/01/16 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
详解Python中__new__方法的作用
2022/03/31 Python