详解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 后缀名判断限制代码
Mar 31 NodeJs
提高NodeJS中SSL服务的性能
Jul 15 NodeJs
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
nodejs npm package.json中文文档
Sep 04 NodeJs
轻松创建nodejs服务器(5):事件处理程序
Dec 18 NodeJs
PHP和NodeJs开发的应用如何共用Session
Apr 16 NodeJs
Ajax异步文件上传与NodeJS express服务端处理
Apr 01 NodeJs
NodeJs安装npm包一直失败的解决方法
Apr 28 NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
nodejs nedb 封装库与使用方法示例
Feb 06 NodeJs
NodeJS模块Buffer原理及使用方法解析
Nov 11 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获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
php Smarty date_format [格式化时间日期]
2010/03/15 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
基于elementUI竖向表格、和并列的案例
2020/10/26 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
Python3解释器知识点总结
2019/02/19 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
英国女性时尚品牌:Apricot
2018/12/04 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
现金会计岗位职责
2013/12/05 职场文书
就业协议书样本
2014/08/20 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
鲁冰花观后感
2015/06/10 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript