IWinter 是一个路由转控制器的 node 库,只解决一个问题:为了让使用者以更优雅的姿式进行路由的编写。支持在 Express 和 Koa 中使用。node
最近在学习使用 Typescript ,打算把之前写的博客管理后台用 Typescript 进行全面重构,在重构服务端代码时接触到了 Typescript 的装饰器功能。能够用装饰器对路由进行一层包装,而后就能够这样编写路由:git
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 供你们使用。今后就告别这样编写路由了 ;)github
//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']
};
...复制代码
*
Nodejs 用户*
Typescript 用户*
Express / Koa 用户express
npm install --save iwinter复制代码
import IWinter from 'iwinter';复制代码
Koa 中如何使用:npm
import * as Router from 'koa-router';
...
app.use(new IWinter({
engine: 'koa',
router: new Router(),
dir: path.join(__dirname, 'controller')
}).controller());
...复制代码
Express 中如何使用:api
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();复制代码
Express 示例
Koa 示例bash
详细配置能够查看 项目 READMEapp
喜欢的话,欢迎使用,欢迎 Star :)koa