网站更新提示ui怎末做,网站及其建设的心得,做自己的网站能赚钱吗,泰国云服务器文章目录 1. koa中间件简介2. 中间件类型1. 应用级中间件2. 路由级中间件3. 错误处理中间件4. 第三方中间件 3.中间件执行流程 1. koa中间件简介
在Koa中#xff0c;中间件呈现为一个异步函数#xff0c;该函数支持 async/await 语法#xff0c;它接收两个参数#xff1a;… 文章目录 1. koa中间件简介2. 中间件类型1. 应用级中间件2. 路由级中间件3. 错误处理中间件4. 第三方中间件 3.中间件执行流程 1. koa中间件简介
在Koa中中间件呈现为一个异步函数该函数支持 async/await 语法它接收两个参数 ctx 和 next 。 ctx 是对当前HTTP请求的封装而 next 是一个函数当被调用时执行流程会进入下一个中间件。中间件的工作被 next() 分为前后两部分next() 返回一个 Promise 对象。 中间件的作用十分广泛包括但不限于身份验证、日志记录、请求处理等。它为开发人员提供了一种灵活的方式来处理请求并能够增加额外的逻辑层而不必修改核心应用逻辑。 Koa的洋葱模型是一种独特的中间件执行机制它以next()函数为分割点先由外到内执行请求Request的逻辑然后再由内到外执行响应Response的逻辑。这种模型确保了中间件的执行顺序使得依赖其他中间件结果的中间件能够正确工作。
2. 中间件类型
1. 应用级中间件
应用级中间件绑定到 Koa 应用程序对象上并在每个请求处理周期中执行。 应用级中间件通常用于执行跨路由的共享任务比如日志记录、错误处理、身份验证等。 应用级中间件匹配任何路由。
var router new Router(); // 总路由
// 如果get,post回调函数中没有next参数这个路由被匹配到了就不会继续向下匹配
app.use(async (ctx, next){console.log(应用级中间件)next()
})
router.get(/abcd, async (ctx) {ctx.body 应用级中间件
});// 使用路由中间件
app.use(router.routes()).use(router.allowedMethods());app.listen(8081, function() {console.log(服务启动端口号8081)
});2. 路由级中间件
路由级中间件与特定路由相关联只在特定路由匹配时执行。 路由级中间件用于在特定路由上执行特定任务比如请求验证、权限控制等。
const Koa require(koa);
const app new Koa();
var Router require(koa-router);
var router new Router(); // 总路由app.use(async (ctx, next){console.log(应用级中间件)next()
})
router.get(/abcd, async(ctx, next){console.log(路由级中间件)next()
})
router.get(/abcd, async (ctx) {ctx.body 路由级中间件
});// 使用路由中间件
app.use(router.routes()).use(router.allowedMethods());app.listen(8081, function() {console.log(服务启动端口号8081)
});3. 错误处理中间件
错误处理中间件用于捕获应用程序中发生的错误并作出相应的处理。 在 Koa 中错误处理中间件通常是最后一个中间件用来处理未捕获的错误并发送适当的响应给客户端。
const Koa require(koa);
const app new Koa();
var Router require(koa-router);
var router new Router(); // 总路由app.use(async (ctx, next){console.log(应用级中间件)next()if(ctx.status 404) {ctx.status 404ctx.body 404 页面} else{ctx.body ctx.url}
})
router.get(/abcd, async (ctx) {ctx.body 路由级中间件
});// 使用路由中间件
app.use(router.routes()).use(router.allowedMethods());app.listen(8081, function() {console.log(服务启动端口号8081)
});4. 第三方中间件
中间件说明koa-router提供全面的路由功能比如类似Express的app.get/post/put的写法URL命名参数、路由命名、嵌套路由、支持加载多个中间件koa-bodyparserpost提交数据中间件解析请求体时需要加载的中间件支持x-www-form-urlencoded, application/json等格式的请求体不支持form-data的请求体koa-views对进行视图模板渲染支持ejs, nunjucks等模板引擎koa-static静态资源中间件用作类似Nginx的静态文件服务在本地开发时可用于加载前端文件或后端Fake数据koa-sessionsession验证支持将会话信息存储在本地Cookie或Redis, MongoDBkoa-jwttoken验证路由权限控制功能Session Base转为用Token Basekoa-helmet网络安全增加Strict-Transport-Security, X-Frame-Options, X-Frame-Options等HTTP头提高应用程序的安全性koa-compress当响应体较大时启用类似Gzip的压缩技术减少传输内容koa-logger输出请求日志的功能包括请求的url、状态码、响应时间、响应体大小等信息koa-convert基于Promise的中间件和基于Generate的中间件相互转换koa-nunjucks-2轻量级 Nunjucks 中间件可以用作模板引擎为koa应用提供页面渲染功能koa-favicon页面logo加载koa-jsonget提交数据的中间件koa-onerror在服务器产生错误throw 抛出等后自动重定义到指定路径koa-respond在Koa上下文中添加了常用的方法
koa-static api 文档 static(root, [opts]) root: 静态文件的根目录。 opts: maxage: 缓存控制指定浏览器缓存的最大时间毫秒。hidden: 是否允许访问隐藏文件默认为false。index: 默认索引文件名默认为’index.html’。defer: 是否延迟发送直至其他中间件执行完毕。gzip: 自动使用GZIP压缩文件默认启用。brotli: 使用Brotli压缩默认也启用。setHeaders**: 自定义响应头设置的函数。extensions: 无扩展名请求时尝试匹配数组中的扩展名来查找文件。 import path from path;
const Koa require(koa);
const app new Koa();
const staticKoa require(koa-static)
const __dirname path.resolve();
app.use(staticKoa(__dirname /uploads))
// 使用koa-static中间件提供静态文件服务
// 或用 app.use(serve(path.join(__dirname, public)));
app.listen(8081, function() {console.log(服务启动端口号8081)
});3.中间件执行流程
1.先应用级再路由级。 2.同级别的中间件代码顺序会影响执行顺序。 3.不同级别代码顺序无影响都是先执行应用级再路由级
const Koa require(koa)
const app new Koa()
const Router require(koa-router)
var router new Router(); // 总路由
app.use(async (ctx, next) {console.log(1);await next();console.log(2);
})router.get(/abcd, async (ctx, next) {console.log(abcd11);await next();console.log(abcd22);
})router.get(/abcd, async (ctx) {console.log(abcd);ctx.body abcd页;
})
app.use(async (ctx, next) {console.log(3);await next();console.log(4);
})
app.use(router.routes()).use(router.allowedMethods());app.listen(8081, function() {console.log(服务启动端口号8081)
});