详解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使用jQuery选择器操作DOM
Feb 13 NodeJs
Nodejs中解决cluster模块的多进程如何共享数据问题
Nov 10 NodeJs
Nodejs进阶:核心模块net入门学习与实例讲解
Nov 21 NodeJs
NodeJS学习笔记之Module的简介
Mar 24 NodeJs
nodejs批量下载图片的实现方法
May 19 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
May 15 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
NodeJS 实现多语言的示例代码
Sep 11 NodeJs
nodejs基础之buffer缓冲区用法分析
Dec 26 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
NodeJS多种创建WebSocket监听的方式(三种)
Jun 04 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
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
判断用户是否在线的代码
2011/03/05 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
2019/09/10 Javascript
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
Python网络编程 Python套接字编程
2017/09/13 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
Django框架验证码用法实例分析
2019/05/10 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
青年文明号复核材料
2014/02/11 职场文书
考核工作实施方案
2014/03/30 职场文书
装饰公司活动策划方案
2014/08/23 职场文书
信访维稳工作汇报
2014/10/27 职场文书
2014年大学生工作总结
2014/11/20 职场文书