详解IWinter 一个路由转控制器的 Nodejs 库

 更新时间:2017年11月15日 09:23:48   作者:yvanwangl  
本篇文章主要介绍了详解IWinter 一个路由转控制器的 Nodejs 库,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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使用redis作为缓存介质实现的封装缓存类示例

    nodejs使用redis作为缓存介质实现的封装缓存类示例

    这篇文章主要介绍了nodejs使用redis作为缓存介质实现的封装缓存类,涉及nodejs操作redis进行缓存设置相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • 原生node.js案例--前后台交互

    原生node.js案例--前后台交互

    本文主要介绍了原生node.js案例--前后台交互。本案例包含4部分:(1)HTML部分;(2)ajax部分;(3)JavaScript部分;(4)node服务器部分。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • nodejs的路径问题的解决

    nodejs的路径问题的解决

    这篇文章主要介绍了nodejs的路径问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Node.js中的npm单独与批量升级依赖包的方式超详细讲解

    Node.js中的npm单独与批量升级依赖包的方式超详细讲解

    npm outdated仅检查所有已安装包的依赖关系,并将当前版本远程仓库中的最新版本进行对比,不会升级,这篇文章主要介绍了Node.js中的npm单独与批量升级依赖包的方式超详细讲解,需要的朋友可以参考下
    2024-02-02
  • npm install常见报错以及问题详解

    npm install常见报错以及问题详解

    npm install总是一言难尽,下面这篇文章主要给大家介绍了关于npm install常见报错以及问题的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • 学习使用grunt来打包JavaScript和CSS程序的教程

    学习使用grunt来打包JavaScript和CSS程序的教程

    这篇文章主要介绍了学习使用grunt来打包JavaScript和CSS程序的教程,grunt基于node.js和需要的朋友可以参考下
    2016-01-01
  • node.js中的http.response.write方法使用说明

    node.js中的http.response.write方法使用说明

    这篇文章主要介绍了node.js中的http.response.write方法使用说明,本文介绍了http.response.write的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • 参考EventEmitter实现完整订阅发布功能函数

    参考EventEmitter实现完整订阅发布功能函数

    这篇文章主要为大家介绍了参考EventEmitter实现完整订阅发布功能函数示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • node.js+postman实现模拟HTTP服务器与客户端交互

    node.js+postman实现模拟HTTP服务器与客户端交互

    本文主要介绍了node.js+postman实现模拟HTTP服务器与客户端交互,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • node如何实现简单的脚手架浅析

    node如何实现简单的脚手架浅析

    在工作中,需要开发一个脚手架,用于给相关用户提供相关的开发便利性,下面这篇文章主要给大家介绍了关于node如何实现简单的脚手架的相关资料,需要的朋友可以参考下
    2022-05-05

最新评论