Будет использоваться и написана структура koa — (koa-router)

koa

Промежуточное ПО, обычно используемое в Koa:

  • koa-session: позволить HTTP без сохранения состояния иметь состояние, а сеанс, основанный на cookie, для сохранения информации в фоновом режиме.
  • koa-mysql: инкапсулирует операторы SQL, которые необходимо использовать.
  • koa-mysql-session: используйте, когда вы не хотите хранить сеанс в памяти, но хотите сохранить сеанс в базе данных mysql.
  • koa-router: фон будет получать URL-адреса различных запросов, а маршрутизация будет использовать различную логику обработки в соответствии с разными URL-адресами.
  • koa-view: при запросе html-страницы фон будет использовать механизм шаблонов для рендеринга данных в шаблон, а затем вернуть их в фон
  • koa-static: При запросе img, js, css и других файлов никакой другой логики не требуется, нужно только прочитать файл
  • koa-better-body: когда сообщение загружает файл, анализировать тело запроса

коа серия статей:

Использование koa-router

var Koa = require('koa');
var Router = require('koa-router');
var app = new Koa();
var router = new Router();
router.get('/home',(ctx,next)=>{ 
  ctx.body = 'home'
  next();
});
router.get('/user', (ctx, next) => {
  ctx.body = 'user';
  next();
});
app.use(router.routes())
app.use(router.allowedMethods());

Тайна koa-router

Если нет коа-роутера

var Koa = require('koa');
var Router = require('koa-router');
var app = new Koa();
var router = new Router();
//将路由的处理交给中间件
app.use((ctx, next) => {
    if (ctx.path === '/' && ctx.method === 'GET') {
        ctx.body = '首页'
   } else {
        next();
   }
})
app.use((ctx, next) => {
   if (ctx.path === '/user' && ctx.method === 'GET') {
        ctx.body = '用户'
   } else {
        next();
  }
});

Как видно из вышесказанного, при отсутствии коа-маршрутизатора фактически каждый маршрут обрабатывается в виде посредника регистрации коа, что не способствует слабой связанности и модульности, поэтому извлекается логика обработки всех маршрутов. и объединены в одно большое промежуточное программное обеспечение koa-router используется для его обработки, и, наконец, большое промежуточное программное обеспечение регистрируется на koa.Если вы не знаете принцип работы промежуточного программного обеспечения koa, вы можете обратиться к другой статье.Будет использоваться и написана структура koa — (базовая структура koa)

Принцип работы koa-router

Поскольку koa-router также является большим промежуточным ПО с множеством мелких промежуточных ПО, в нем также необходимо использовать модель onion.Характеристики модели onion:

  • middles: контейнер для хранения промежуточного ПО, используемый для хранения зарегистрированного промежуточного ПО.
  • get(path,fn): используется для регистрации промежуточного ПО и его хранения в промежуточных слоях, поскольку это промежуточное ПО для маршрутизации, есть дополнительный путь параметра
  • compose(): используется для объединения промежуточного программного обеспечения и обеспечения выполнения промежуточного программного обеспечения маршрутизации по порядку.
  • route(): используется для регистрации промежуточного программного обеспечения koa-router в промежуточном программном обеспечении приложения, основная функция — вызывать промежуточное программное обеспечение маршрутизации для соответствия запрошенному пути ctx.path

Если у вас есть вопросы о промежуточном программном обеспечении и луковых моделях, вы можете обратиться кБудет использоваться и написана структура koa (инфраструктура koa)

уровень: хранит зарегистрированную информацию о маршрутизации

class Layer {
    constructor(path,callback) {
	this.path = path	//路由路径
        this.cb = callback	//对应的处理函数
    }
}

middles: контейнер для хранения промежуточного ПО, используемый для хранения зарегистрированного промежуточного ПО.

class Router {
    constructor() {
        this.middles = [];
    }
}
module.exports = Router

get: используется для регистрации промежуточного программного обеспечения и его хранения в промежуточных слоях.Поскольку это промежуточное программное обеспечение маршрутизации, существует дополнительный путь к параметрам.

class Router {
    constructor() {
        this.middles = [];
    }
    //set,post等同理
    get(path,callback) {
    	const layer = new Layer(path,callback)
    	this.middles.push(layer)
    }
}
module.exports = Router

маршруты: используется для регистрации промежуточного программного обеспечения koa-router в промежуточном программном обеспечении приложения, основная функция — вызывать промежуточное программное обеспечение маршрутизации, чтобы оно соответствовало пути запроса ctx.path

class Router {
    constructor(){
        this.middles=[];
    }
    //set,post等同理
    get(path,fn){
        const layer = new Layer(path,callback)
    	this.middles.push(layer)
    }
    compose(){}
    routes() {
    // 返回一个组合的中间件router.routes供app.use注册
    // next是koa-router之后app.use注册的中间件
    return async (ctx, next) => {
      // 请求的路径
      let path = ctx.path;
      // 和路径匹配的路由的处理函数
      let arr = []
      for(let item of this.middles) {
      	if(item.path === path) {
        	arr.push(item.cb)
        }
      }
      // 一级路由下面还有二级路由
      // 用洋葱模型串联所有匹配路由的处理函数
      this.compose(ctx, arr,next);
    }
  }
}
module.exports = Router

compose: используется для объединения промежуточного программного обеспечения и обеспечения выполнения промежуточного программного обеспечения маршрутизации по порядку.

class Router {
    constructor() {
        this.middles = [];
    }
    //set,post等同理
    get(path,callback){
    	const layer = new Layer(path,callback)
    	this.middles.push(layer)
    }
    //arr为匹配的路由集合
    compose(ctx,arr,next){ 
        dispatch(index){
        	// 所有的路由处理完成之后,处理在路由中间件后面app.use注册的中间件
            if(index === lasts.length) return next();
            let route = arr[index];
            route(ctx,()=>{dispatch(index+1)})
        }
        dispatch(0)
    },
    return async (ctx, next) => {
      // 请求的路径
      let path = ctx.path;  
      // 和路径匹配的路由的处理函数
      let arr = []
      for(let item of this.middles) {
      	if(item.path === 'path') {
        	arr.push(item.cb)
        }
      }
      // 一级路由下面还有二级路由
      // 用洋葱模型串联所有匹配路由的处理函数
      this.compose(ctx, arr,next);
    }
}
module.exports = Router

О других

Приведенный выше маршрутизатор является упрощенной версией koa-router. Он реализует только маршрутизацию первого уровня в koa-router, но может проиллюстрировать основную идею koa-router. В koa-router добавлено использование для регистрации второго уровня. уровневая маршрутизация, и в то же время Добавлено много другой логической обработки, включая редиректы

Эпилог

Принцип промежуточного программного обеспечения koa-router в основном представлен, а о другом промежуточном программном обеспечении kao мы узнаем позже: