详解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 win7下安装方法
May 24 NodeJs
利用NodeJS的子进程(child_process)调用系统命令的方法分享
Jun 05 NodeJs
NodeJS的url截取模块url-extract的使用实例
Nov 18 NodeJs
轻松创建nodejs服务器(2):nodejs服务器的构成分析
Dec 18 NodeJs
PHP和NodeJs开发的应用如何共用Session
Apr 16 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
angular2+nodejs实现图片上传功能
Mar 27 NodeJs
nodejs批量下载图片的实现方法
May 19 NodeJs
Nodejs调用WebService的示例代码
Sep 29 NodeJs
详解NodeJs开发微信公众号
May 25 NodeJs
nodejs微信开发之授权登录+获取用户信息
Mar 17 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
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
python数据结构之链表详解
2017/09/12 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
简单了解python列表和元组的区别
2020/05/14 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
实习生自我鉴定
2013/12/12 职场文书
获奖的大学生创业计划书
2014/01/05 职场文书
诚信承诺书范文
2014/03/27 职场文书
团代会宣传工作方案
2014/05/08 职场文书
社区科普工作方案
2014/06/03 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
经典演讲稿开场白
2014/08/25 职场文书
房屋买卖委托书格式范本格式
2014/10/13 职场文书
村官个人总结范文
2015/03/03 职场文书
红歌会主持词
2015/07/02 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书