详解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 url验证(url-valid)的使用方法
Nov 18 NodeJs
nodejs npm包管理的配置方法及常用命令介绍
Jun 05 NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 NodeJs
学习 NodeJS 第八天:Socket 通讯实例
Dec 21 NodeJs
Nodejs读取文件时相对路径的正确写法(使用fs模块)
Apr 27 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
Nodejs把接收图片base64格式保存为文件存储到服务器上
Sep 26 NodeJs
NodeJs 模仿SIP话机注册的方法
Jun 21 NodeJs
nodejs实现聊天机器人功能
Sep 19 NodeJs
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
Nov 18 NodeJs
NodeJS配置CORS实现过程详解
Dec 02 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/07 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
php微信公众号开发模式详解
2016/11/28 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
javascript的函数
2007/01/31 Javascript
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
心扬JS分页函数代码
2010/09/10 Javascript
js弹窗返回值详解(window.open方式)
2014/01/11 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
python实现FTP服务器服务的方法
2017/04/11 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
快速查找Python安装路径方法
2020/02/06 Python
python多维数组分位数的求取方式
2020/03/03 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
爱与责任师德演讲稿
2014/08/26 职场文书
国庆节活动总结
2014/08/26 职场文书
节能环保家庭事迹材料
2014/08/27 职场文书
街道务虚会发言材料
2014/10/20 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS
APP界面设计技巧和注意事项
2022/04/29 杂记