详解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实用示例 缩址还原
Dec 28 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
nodejs简单实现操作arduino
Sep 25 NodeJs
初探nodeJS
Jan 24 NodeJs
nodejs基础知识
Feb 03 NodeJs
详解nodejs微信jssdk后端接口
May 25 NodeJs
Windows下快速搭建NodeJS本地服务器的步骤
Aug 09 NodeJs
nodejs简单实现TCP服务器端和客户端的聊天功能示例
Jan 04 NodeJs
nodejs实现的连接MySQL数据库功能示例
Jan 25 NodeJs
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
Mar 02 NodeJs
nodejs简单抓包工具使用详解
Aug 23 NodeJs
nodejs中内置模块fs,path常见的用法说明
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
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
Python二分法搜索算法实例分析
2015/05/11 Python
Python守护进程用法实例分析
2015/06/04 Python
Python爬虫代理IP池实现方法
2017/01/05 Python
名片管理系统python版
2018/01/11 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
Python中最大递归深度值的探讨
2019/03/05 Python
Django的性能优化实现解析
2019/07/30 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
linux面试题参考答案(6)
2016/06/23 面试题
优秀员工自荐书范文
2013/12/08 职场文书
部队学习十八大感言
2014/01/11 职场文书
药品采购员岗位职责
2014/02/08 职场文书
《小鹰学飞》教学反思
2014/04/23 职场文书
门卫岗位职责
2015/02/09 职场文书
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server