详解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极简入门教程(二):定时器
Oct 25 NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 NodeJs
nodeJS删除文件方法示例
Dec 25 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
nodejs dgram模块广播+组播的实现示例
Nov 04 NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
Jun 24 NodeJs
浅谈Node的内存泄露问题
May 06 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 str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
php去除HTML标签实例
2013/11/06 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
javascript 运算数的求值顺序
2011/08/23 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
vue.js将unix时间戳转换为自定义时间格式
2017/01/03 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
javascript用rem来做响应式开发
2018/01/13 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
gearman的安装启动及python API使用实例
2014/07/08 Python
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
python时间日期操作方法实例小结
2020/02/06 Python
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
电大毕业个人生自我鉴定
2014/03/26 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
新手初学Java List 接口
2021/07/07 Java/Android