详解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:

    Nodejs 用户
    Typescript 用户
    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();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容