IWinter 一个路由转控制器的 Nodejs 库
发布于 6 年前 作者 yvanwangl 2890 次浏览 来自 分享

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

项目地址

简介:

最近在学习使用 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();

使用示例

Express 示例 Koa 示例

详细配置可以查看 项目 README

喜欢的话,欢迎使用,欢迎 Star :)

参考文献: 从 JavaScript 到 TypeScript 5 - 路由进化

推荐 Typescript 系列文章: 从 JavaScript 到 TypeScript 1 - 什么是 TypeScript

回到顶部