Промежуточное ПО, обычно используемое в 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 — (базовая структура koa)
- Будет использоваться и написана структура koa — (koa-router)
- Будет использоваться и написана структура koa — (koa-view, koa-static)
- Будет использоваться и написана структура koa — (koa-bodyparser, 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 мы узнаем позже: