详解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中转换URL字符串与查询字符串详解
Nov 26 NodeJs
nodejs中实现sleep功能实例
Mar 24 NodeJs
浅析Nodejs npm常用命令
Jun 14 NodeJs
NodeJS实现客户端js加密
Jan 09 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
Nodejs实现的操作MongoDB数据库功能完整示例
Feb 02 NodeJs
Nodejs对postgresql基本操作的封装方法
Feb 20 NodeJs
nodejs和react实现即时通讯简易聊天室功能
Aug 21 NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 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
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
Jquery选择器 $实现原理
2009/12/02 Javascript
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/25 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
2020/12/14 Vue.js
Python检测网站链接是否已存在
2016/04/07 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
python重试装饰器的简单实现方法
2019/01/31 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
python数据预处理方式 :数据降维
2020/02/24 Python
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
DTD的含义以及作用
2014/01/26 面试题
《小猪家的桃花树》教学反思
2014/04/11 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
出租房屋协议书
2014/09/14 职场文书
工作所在部门证明
2014/09/21 职场文书
安全责任书
2015/01/29 职场文书
英文辞职信范文
2015/05/13 职场文书
小学运动会前导词
2015/07/20 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
Python实现机器学习算法的分类
2021/06/03 Python
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang