Декоратор для создания роутера и промежуточного ПО в egg.js
Установка:
npm i egg-decorator-router --save
Использование:
Включите декоратор в файле config/plugin.js:
// {app_root}/config/plugin.js
exports.decoratorRouter = {
enable: true,
package: 'egg-decorator-router'
}
Для проектов на основе typescript можно использовать декораторы напрямую. Если проект написан на javascript, необходимо установить пакеты babel-plugin-transform-decorators-legacy и babel-plugin-transform-object-rest-spread и добавить файл .babelrc.
Добавьте файл .babelrc со следующим содержимым:
{
"plugins": ["transform-decorators-legacy", "transform-object-rest-spread"]
}
Импортируйте необходимые зависимости в контроллер:
Для проекта на javascript:
const {
Route,
HttpAll,
HttpGet,
HttpPost,
HttpPut,
HttpPatch,
HttpDelete,
Middleware
} = require('egg-decorator-router')
Для проекта на typescript:
import {
Route,
HttpAll,
HttpGet,
HttpPost,
HttpPut,
HttpPatch,
HttpDelete,
Middleware
} from 'egg-decorator-router'
Определите корневой путь в контроллере с помощью декоратора @Route():
Корневой путь — /:
@Route()
Корневой путь — /:
@Route('/')
Корневой путь — /routename/:
@Route('/routename')
Корневой путь — /routename/action/:
@Route('/routename/action')
Используйте декораторы HttpMethod для определения подпути:
Подпуть — /:
@HttpGet()
Подпуть — /:
@HttpGet('/')
Подпуть — /action/:
@HttpGet('/action')
Определите промежуточное ПО с помощью декоратора @Middleware(routeM):
@Middleware(routeM)
Пример использования:
'use strict'
const { Controller } = require('egg')
const { Route, HttpGet, Middleware, filters } = require('egg-decorator-router')
const { DefaultFilter } = filters
const routeM = (ctx, next) => {
console.log('passed route middleware')
next()
}
const actionM = i => {
return (ctx, next) => {
console.log('passed action middleware ' + i)
next()
}
}
@Route()
@Middleware(routeM)
class HomeController extends Controller {
@HttpGet('/') // path: /
async index() {
await new Promise(resolve => {
this.ctx.body = 'ssss'
resolve()
})
}
@HttpGet() // path: /func1
@Middleware(actionM(2), 2)
@Middleware(actionM(1), 1)
func1(ctx) {
ctx.body = 'hi, func1'
}
@HttpGet(':id') // path: /:id
@DefaultFilter('aaa')
func2(ctx) {
ctx.body = 'hi, func2' + ctx.params.id
}
}
module.exports = HomeController
Лицензия: MIT.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )