详解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访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
NodeJS的url截取模块url-extract的使用实例
Nov 18 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
初探nodeJS
Jan 24 NodeJs
详解使用nodeJs安装Vue-cli
May 17 NodeJs
浅谈nodejs中的类定义和继承的套路
Jul 26 NodeJs
nodejs创建简易web服务器与文件读写的实例
Sep 07 NodeJs
详解redis在nodejs中的应用
May 02 NodeJs
nodejs实现用户登录路由功能
May 22 NodeJs
Nodejs技巧之Exceljs表格操作用法示例
Nov 06 NodeJs
详解nodejs内置模块
May 06 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 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 EOT定界符的使用详解
2008/09/30 PHP
使用PHP下载CSS文件中的图片的代码
2013/09/24 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
Javascript模块化编程详解
2014/12/01 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
vue数据双向绑定原理解析(get & set)
2017/03/08 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
js数据类型检测总结
2018/08/05 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
python设置环境变量的原因和方法
2019/06/24 Python
基于python使用tibco ems代码实例
2019/12/20 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
工程项目经理岗位职责
2013/12/15 职场文书
会计专业毕业自荐书范文
2014/02/08 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
反邪教警示教育方案
2014/05/13 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
廉洁自律个人总结
2015/02/14 职场文书
酒桌上的祝酒词
2015/08/12 职场文书