详解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实现多人同时在线移动鼠标的小游戏分享
Dec 06 NodeJs
nodejs通过phantomjs实现下载网页
May 04 NodeJs
使用DNode实现php和nodejs之间通信的简单实例
Jul 06 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
Nodejs 搭建简单的Web服务器详解及实例
Nov 30 NodeJs
基于Nodejs利用socket.io实现多人聊天室
Feb 22 NodeJs
详解nodejs express下使用redis管理session
Apr 24 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
详解NODEJS基于FFMPEG视频推流测试
Nov 17 NodeJs
nodejs使用redis作为缓存介质实现的封装缓存类示例
Feb 07 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
nodejs log4js 使用详解
May 31 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五种设计模式小结
2011/03/23 PHP
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
jQuery Ajax()方法使用指南
2014/11/19 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
在python中画正态分布图像的实例
2019/07/08 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
Python pip 常用命令汇总
2020/10/19 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
品学兼优的大学生自我评价
2013/09/20 职场文书
关于安全的演讲稿
2014/05/09 职场文书
创文明城市标语
2014/06/16 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
北京颐和园导游词
2015/01/30 职场文书
职称评定个人总结
2015/03/05 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
学校百日安全活动总结
2015/05/07 职场文书
六年级作文之预言作文
2019/10/25 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
react 项目中引入图片的几种方式
2021/06/02 Javascript