详解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监控文件变化并使用sftp上传到服务器
Feb 18 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
nodejs结合socket.io实现websocket通信功能的方法
Jan 12 NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 NodeJs
nodejs连接mysql数据库及基本知识点详解
Mar 20 NodeJs
nodeJS模块简单用法示例
Apr 21 NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
nodeJS与MySQL实现分页数据以及倒序数据
Jun 05 NodeJs
nodejs处理tcp连接的核心流程
Feb 26 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
Discuz! Passport 通行证整合
2008/03/27 PHP
PHP中文件缓存转内存缓存的方法
2011/12/06 PHP
PHP序列化操作方法分析
2016/09/28 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
开学寄语大全
2014/04/08 职场文书
公司开业庆典策划方案
2014/06/04 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
会议开幕词
2015/01/28 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
行政处罚事先告知书
2015/07/01 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
财务年终工作总结大全
2019/06/20 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书
深入理解python协程
2021/06/15 Python