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

IWinter 是一个路由转控制器的 node 库,只解决一个问题:为了让使用者以更优雅的姿势进行路由的编写。支持在 Express 和 Koa 中使用。

项目地址:https://github.com/yvanwangl/iwinter

简介:

最近在学习使用 Typescript ,打算把以前写的博客管理后台用 Typescript 进行全面重构,在重构服务端代码时接触到使用了 Typescript 的装饰器功能。可以用装饰器对路由进行一层包装,然后就可以这样编写路由:

@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 供大家使用。从此就告别这样编写路由了 ;)

rush:js;"> //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 安装 及 使用

rush:bash;"> npm install --save iwinter
rush:js;"> import IWinter from 'iwinter';

Koa 中如何使用:

rush:js;"> import * as Router from 'koa-router'; ... app.use(new IWinter({ engine: 'koa',router: new Router(),dir: path.join(__dirname,'controller') }).controller()); ...

Express 中如何使用:

rush:js;"> import * as express from 'express'; let app = express(); let router = express.Router(); ... new IWinter({ engine: 'express',router: app,'controller'),prefix: '' }).controller();

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

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...