详解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(三)--- Node.js模块
May 25 NodeJs
nodejs实现HTTPS发起POST请求
Apr 23 NodeJs
Nodejs中的this详解
Mar 26 NodeJs
Nodejs中 npm常用命令详解
Jul 04 NodeJs
nodejs搭建本地服务器并访问文件的方法
Mar 03 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
Sep 19 NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 NodeJs
详解Nodejs mongoose
Jun 10 NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 NodeJs
NodeJS配置CORS实现过程详解
Dec 02 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
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
利用PHP判断文件是否为图片的方法总结
2017/01/06 PHP
php取出数组单个值的方法
2018/03/12 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
js 程序执行与顺序实现详解
2013/05/13 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
webpack4.x CommonJS模块化浅析
2018/11/09 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
[01:05:12]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS CIS-GAME
2014/05/21 DOTA
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
简单实现python爬虫功能
2015/12/31 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
详解python分布式进程
2018/10/08 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
python网络编程之五子棋游戏
2020/05/14 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
你常见到的runtime exception
2016/09/05 面试题
描述内存分配方式以及它们的区别
2016/10/15 面试题
自考生自我评价分享
2014/01/18 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
2014年食堂工作总结
2014/11/20 职场文书
领导欢迎词范文
2015/01/26 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书