详解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中简单实现Javascript Promise机制的实例
Dec 06 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
Nodejs下DNS缓存问题浅析
Nov 16 NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 NodeJs
使用nodejs下载风景壁纸
Feb 05 NodeJs
详解nodeJS中读写文件方法的区别
Mar 06 NodeJs
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
Mar 28 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
nodejs+mongodb+vue前后台配置ueditor的示例代码
Jan 02 NodeJs
nodejs中实现修改用户路由功能
May 24 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 文本文件的读取效率
2012/02/10 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
python logging类库使用例子
2014/11/22 Python
Python实现批量下载文件
2015/05/17 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
Tensorflow卷积神经网络实例
2018/05/24 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
python多线程实现TCP服务端
2019/09/03 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
新郎婚宴答谢词
2014/01/19 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
交通安全主题班会
2015/08/12 职场文书
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS