egg-shell-decorators 给你的蛋蛋加个壳
Egg.js 路由装饰器,让你的开发更敏捷~
【PS:文末有本人联系方式,欢迎技术交流~】
egg-shell-decorators 是一个 Egg.js 的插件,它提供了一系列的 Decorator 装饰 Controller,让我们先来看一个例子:
// app/controller/user
import { Controller } from 'egg';
import { Get, Message } from 'egg-shell-decorators';export default class UserController extends Controller {@Get('/detail/:id')@Message('so great !')public async get({ params: { id } }) {return await this.service.user.getById(id)}}
复制代码
上面是一个简单的控制器例子,如果是 egg.js 的默认开发方式,那么你得在 router 文件对相应的路由进行映射,而使用 egg-shell-decorators 之后,再也不用在 router 文件进行任何路由匹配了。因为 egg-shell-decorators 的路由解析
会自动对路由进行解析,像上面这个例子会自动解析成 [get] 全局前缀 + /user/detail/:id
,这样我们开发者就不用再去操心映射的问题了,而且在 Controller 里我们就可以知道每一个函数对应的请求信息。
也许你会疑惑上面的@Message
还有为什么直接把查询到的数据 return 了
是怎么回事,现在我将系统的向你介绍该插件的使用:
Installation
$ npm install egg-shell-decorators -S
复制代码
如果不是采用 TypeScript 脚手架,则需执行以下脚本安装相关的 Babel 插件:
$ npm install babel-register babel-plugin-transform-decorators-legacy -D
复制代码
Usage
示范代码均采用 TypeScript
// app/router.ts
import { Application } from 'egg';
import { EggShell } from 'egg-shell-decorators';export default (app: Application) => {EggShell(app, { prefix: '/', quickStart: true });
};
复制代码
配置参数:
prefix: string // 全局前缀
quickStart: boolean // 开启QuickStart
复制代码
如果不是采用 TypeScript 脚手架,则需在入口注册 Bable 插件使其支持 Decorator:
// app.js
'use strict';
require('babel-register')({plugins: ['transform-decorators-legacy',],
});
复制代码
Specialty
路由解析
是 egg-shell-decorators 最大的特点,使用 Decorator 装饰的路由,则会被自动解析成对应的路由:
- 文件路径:
app/controller/home.ts
- @Get('/detail/:id')
- @Post('/')
- 解析路由:
[get] 全局前缀 + /home + /detail/:id
[post] 全局前缀 + /home + /
这里的 全局前缀 指的是你在 EggShell 里配置的 prefix
,路由解析支持多层级解析噢
~
Member
- Http相关
- ✅Get
- ✅Post
- ✅Put
- ✅Delete
- ✅Patch
- ✅Options
- ✅Head
- ?Header
- 中间件相关
- ✅Before
- ✅After
- ✅BeforeAll
- ✅AfterAll
- Swagger相关
- ?敬请期待下一个版本
- 其他
- ✅Prefix
- ✅Message
- ✅IgnoreJwt
- ✅IgnoreJwtAll
Prefix
如果你不喜欢路由解析
给你的路径,那么你可以自定义解析的路径:
// app/controller/user
import { Controller } from 'egg';
import { Get, Message, Prefix } from 'egg-shell-decorators';@Prefix('/super2god')
export default class UserController extends Controller {@Get('/detail/:id')@Message('so great !')public async get({ params: { id } }) {return await this.service.user.getById(id)}}
复制代码
这样解析出来的路由就是:全局前缀 + /super2god/detail/:id
,而不是全局前缀 + /user/detail/:id
QuickStart
在 EggShell 里配置 quickStart
为 true 即可开启 QuickStart 模式,QuickStart 模式会自动处理响应体:
import { Controller } from 'egg';
import { Get, Message, Error, StatusError } from 'egg-shell-decorators';export default class UserController extends Controller {/**status: 200{success: true,message: '棒棒哒',data: {id: '123',name: 'super2god'},}*/@Get('/:id')@Message('棒棒哒')public async get({ params: { id } }) {return await this.service.user.getById(id)}/**status: 200{success: false,message: '故意的'}*/@Post('/:id')public post() {throw Error('故意的')}/**status: 403{success: false,message: '权限不足'}*/@Post('/:id')public post() {// StatusError 的第二个参数默认值为500throw StatusError('权限不足', 403)}}
复制代码
RESTful
让我们用 egg-shell-decorators 快速写一套 RESTful 风格的接口(QuickStart 模式):
import { Controller } from 'egg';
import { Get, Post, Put, Delete } from 'egg-shell-decorators';export default class SubOrderController extends Controller {@Get('/:id')public get({ params: { id }, query: { keyword } }) {return `resuful get : ${id}, ${keyword}`;}@Post('/:id')public post({ params: { id }, request: { body: { keyword } } }) {return `resuful post : ${id}, ${keyword}`;}@Put('/:id')public put({ params: { id }, request: { body: { keyword } } }) {return `resuful put : ${id}, ${keyword}`;}@Delete('/:id')public delete({ params: { id }, request: { body: { keyword } } }) {return `resuful delete : ${id}, ${keyword}`;}}
复制代码
由于 egg-shell-decorators 内置把 ctx
对象传进 Controller 的函数里了,所以我们直接结构就可以获取到请求参数了,美滋滋~
当然,除了这四个常用的请求方法,egg-shell-decorators 还提供了其他比较常用的请求方法,具体请看上面的Http请求方法
。
Jwt
Jwt是目前比较流行的身份认证机制,所以 egg-shell-decorators 提供了相关的 Decorator。如果你使用了 egg-jwt
,那默认所以路由都需要进行身份校验,而有时我们想让部分路由不用校验,那么你只需那么做:
import { Controller } from 'egg';
import { Get, IgnoreJwt } from 'egg-shell-decorators';export default class HomeController extends Controller {@IgnoreJwt@Get('/')public async index() {return 'hi, egg';}}
复制代码
是不是很简单呢,如果你想对整个 Controller 都进行校验忽略,那也很简单:
import { Controller } from 'egg';
import { Get, Post, IgnoreJwtAll } from 'egg-shell-decorators';@IgnoreJwtAll
export default class HomeController extends Controller {@Get('/')public async get() {return 'get';}@Post('/')public async post() {return 'post';}}
复制代码
MiddleWare
egg-shell-decorators 提供了四个中间件相关的 Decorator,让你使用中间件更简单:
import { Controller } from 'egg';
import { Get, IgnoreJwtAll, Before, After, BeforeAll, AfterAll } from 'egg-shell-decorators';const Before1 = require('egg-shell-decorators/test/middlewares/before-1');
const Before2 = require('egg-shell-decorators/test/middlewares/before-2');
const Before3 = require('egg-shell-decorators/test/middlewares/before-3');
const Before4 = require('egg-shell-decorators/test/middlewares/before-4');const After1 = require('egg-shell-decorators/test/middlewares/after-1');
const After2 = require('egg-shell-decorators/test/middlewares/after-2');
const After3 = require('egg-shell-decorators/test/middlewares/after-3');
const After4 = require('egg-shell-decorators/test/middlewares/after-4');@BeforeAll([ Before1, Before2 ])
@AfterAll([ After1, After2 ])
@IgnoreJwtAll
export default class HomeController extends Controller {/**before middleware => 1before middleware => 2before middleware => 3before middleware => 4主业务...after middleware => 1after middleware => 2after middleware => 3after middleware => 4*/@Before([ Before3, Before4 ])@After([ After3, After4 ])@Get('/')public async index() {return 'hi, egg';}}
复制代码
egg-shell-decorators 的用法都已经介绍完毕了,如果你是一名 Noder 或者热爱 Egg.js 的小伙伴,那么可以加我微信进行技术交流,让我们一起变得更优秀:
egg-shell-decorators 给你的蛋蛋加个壳相关推荐
- Linux复制文件到usb设备中,使用shell脚本实现USB设备的加载与文件复制
使用shell脚本实现USB设备的加载与文件复制 在Linux操作系统中,如果插入一个USB设备,需要用mount挂载命令才能实现这个设备的加载,下面写一个USB设备挂载与文件复制的Shell程序,程 ...
- 易语言软件加VMProtect壳的正确方法
https://www.cnblogs.com/fox2013/p/4553977.html VMP是一款很强大的加密壳,代码虚拟化技术可以很好的保护程序不被恶意修改破J但是很多人不知道怎么给自己的程 ...
- Android安全讲座第七层 [一] 破解加过壳的APK应用
android应用中的apk的安全问题一直遭人诟病,各种破解,各种汉化,并且有了ida pro这样的逆天工具,对于android应用的破解简直就是小儿科了.但是事物都是两方面的,有矛就有盾,逐渐的ap ...
- shell脚本中变量一定要加双引号
重要的事情说三遍 摘自 https://www.ibm.com/developerworks/cn/linux/shell/bash/bash-2/index.html 字符串比较说明 大多 ...
- shell 脚本中如何实现自加操作
i=1 i=`expr $i + 1` 两边符号为~键 中的符号 转载于:https://blog.51cto.com/sharelife/1081570
- shell中用while循环实现连加操作
#!/bin/bash read COUNT a=1 add=0 while [ $a -le $COUNT ] do add=`expr $add + $a` a=`expr $a + 1` don ...
- shell脚本for循环从1加到100
[root@node1 ~]# vim add.sh[root@node1 ~]# cat add.sh#1/bin/bash#求从1到100的和for i in {1..100}docount=$( ...
- 给大家分享一个简单的例子 给SWF加一个壳
//今天给发家分享下 一个简单的给SWF加壳处理,用到的类是Loader package {//我有一点不明白哦,明明可以用Loader来动态的加载SWF 为什么很多人喜欢用loadMovie 有懂的 ...
- 加Zprotect壳解析
Zprotect是新一代的软件加密保护壳,拥有多项独创的新颖技术,保护后的文件极度复杂,让破解变成一种高成本的体力劳动. Zprotect 支持多种类型的文件格式: 名称 后缀名 Win32 可执行文 ...
最新文章
- 心理所发表关于神经科学研究可信度的评论文章
- 办公室,手机上网不用愁
- 学长毕业日记 :本科毕业论文写成博士论文的神操作20170401
- delphi如何让程序最小化到任务栏(使用Shell_NotifyIcon API函数)
- Fiori Elements - get annotation implementation in backend
- Python-PIL
- constraintlayout_androidApi:ConstraintLayout
- oracle表修改语句,Oracle的常用修改表及字段的语句
- Oracle 扩展sysaux,oracle 清理SYSAUX表空间
- sql server 当月天数
- Activity传递数据
- Linux下的tar命令
- 教育平台在线,教育平台源码 类似eduline教育平台系统源码下载
- 用云计算机,云计算在生活中的应用
- SecureCRT http代理设置
- [强网杯 2019]随便注
- 第13节 IIS之WEB服务器—用于发布网站
- VMware Workstation 15 Pro 安装centos7
- java读取execle
- 爬虫Scrapy框架学习(五)-东莞阳光热线问政平台爬取案例