详解IWinter 一个路由转控制器的 Nodejs 库
作者:yvanwangl 发布时间:2024-05-03 15:56:03
标签: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();
来源:https://juejin.im/post/5a0a5d21f265da431769a75b


猜你喜欢
- a1="sp2=20;sp1=34;" a2="sp3=2;sp2=3;sp1=4;" 两组字符串数
- 情况1:在一个目录下面只有文件,没有文件夹,这个时候可以使用os.listdir在我们的桌面上有一个file目录(文件夹),里面有三个文件f
- 本文实例为大家分享了python tkinter实现弹窗输入输出的具体代码,供大家参考,具体内容如下代码如下:from tkinter im
- 不知道从什么时候开始,在网络上到处可以看到div+css,到底什么是div+css呢?难道就是传说中的标准重构吗?标准从最简单的根源来说不是
- 目录1、吃金币2、打乒乓3、滑雪4、并夕夕版飞机大战5、打地鼠6、小恐龙7、消消乐8、俄罗斯方块9、贪吃蛇10、24点小游戏11、平衡木12
- 并行查询其优势就是可以通过多个线程来处理查询作业,从而提高查询的效率。SQL Server数据库为具有多个CPU的数据库服务器提供并行查询的
- 好东西找起来很麻烦,好用的又不太容易找到,之前看到很多用JS写的,固定漂浮这种效果拖动时难免会产生抖动,自己对CSS还是蛮有好感的,找来找去
- 本文实例总结了PHP session会话操作技巧。分享给大家供大家参考,具体如下:会话技术session将会话数据存储与服务器端,同时使会话
- 5.16 列表生成式l=[]for i in range(100): l.append('egg%s' %i)p
- 分享一下刚遇到的一个小问题,我有一段类似于这样的python代码:# coding: utf-8class A(object):
- 在Vista IIS 7 中用 vs2005 调试 Web 项目核心是要解决以下几个问题:1、Vista 自身在安全性方面的User Acc
- 起因说起来录制视频,我们可能有很多的软件,但是比较坑的是,好像很少的软件支持能够同时录制两个摄像头的视频,于是我们用python自己写一个。
- 服务端监听端口 listen()方法:net.listen({监听类型},{监听的ip和端口})(conn, err){}返回值:conn是
- 前言在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们
- 设计师常常使用一些独特的字体效果和页面效果,阴影是其中一个,它可以让页面中的文字和元素具有立体的效果,从而被突出出来。比如对于文字阴影,传统
- 本文实例为大家分享了python实现发送邮件功能的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*- # Au
- python使用matplotlib的savefig保存时图片保存不完整的问题使用如下形式的代码进行图片保存时,保存的图片出现不完整的情况,
- 本文实例讲述了python将文本转换成图片输出的方法。分享给大家供大家参考。具体实现方法如下:#-*- coding:utf-8 -*-fr
- 看完本篇文章你可以:同步本地和服务器的全部或者部分文件本地debug,服务器跑实验在这之前你要确保服务器上已经创建好虚拟环境你本地已经安装好
- 本文详细介绍了array_slice函数的详细用法以及一些常用的array_slice实例程序,分享给大家供大家参考。具体分析如下:arra