详解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事件的监听与触发的理解分析
Feb 12 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
解决nodejs中使用http请求返回值为html时乱码的问题
Feb 18 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
初识NodeJS服务端开发入门(Express+MySQL)
Apr 07 NodeJs
nodejs 终端打印进度条实例代码
Apr 22 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
nodejs dgram模块广播+组播的实现示例
Nov 04 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 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
一个简洁的多级别论坛
2006/10/09 PHP
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
PHP 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
php+javascript的日历控件
2009/11/19 PHP
PHP 手机归属地查询 api
2010/02/08 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
JavaScript小技巧 2.5 则
2010/09/12 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
原生js实现3D轮播图
2020/03/21 Javascript
js实现内置计时器
2019/12/16 Javascript
[00:37]DOTA2上海特级锦标赛 OG战队宣传片
2016/03/03 DOTA
Python 正则表达式的高级用法
2016/12/04 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
信息专业大学生自我评价分享
2014/01/17 职场文书
公司活动方案范文
2014/03/06 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
小学教师师德培训心得体会
2016/01/09 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js