详解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服务器(7):阻塞操作的实现
Dec 18 NodeJs
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
nodejs 的 session 简单使用
Jun 06 NodeJs
nodejs简单实现操作arduino
Sep 25 NodeJs
nodejs连接mongodb数据库实现增删改查
Dec 01 NodeJs
nodejs处理图片的中间件node-images详解
May 08 NodeJs
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
Sep 19 NodeJs
nodeJs实现基于连接池连接mysql的方法示例
Feb 10 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
NodeJS http模块用法示例【创建web服务器/客户端】
Nov 05 NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
Jun 24 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的开合式多级菜单程序
2006/10/09 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
Vue computed计算属性的使用方法
2017/07/14 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
python函数缺省值与引用学习笔记分享
2013/02/10 Python
九步学会Python装饰器
2015/05/09 Python
Python的randrange()方法使用教程
2015/05/15 Python
python使用socket创建tcp服务器和客户端
2018/04/12 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
windows下Python安装、使用教程和Notepad++的使用教程
2019/10/06 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
大学新生欢迎词
2014/01/10 职场文书
社区七一党员活动方案
2014/01/25 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
医院合作意向书范本
2015/05/08 职场文书
经费申请报告
2015/05/15 职场文书