目录
1.开始
使用koa2:
- express中间件是异步回调,koa2原生支持async/await
- 新开发框架和系统,都开始基于koa2,例如egg.js
- express虽然未过时,但是koa2肯定是未来趋势
目录:
- async/await语法介绍,安装和使用koa2
- 开发接口,连接数据库,实现登录,日志记录
- 分析koa2中间件原理
2.介绍koa2
安装命令:
- npm install koa-generator -g
- Koa2 koa2-test
- npm install & npm rup dev
首先安装一个 koa2 脚手架,通过 koa2 建一个 blog-koa2 的文件夹,进去后把依赖给装上,当然还要加上 cross-env 包才能实现环境变量(npm i cross-env --save-dev),然后修改环境 变量即可。 打开 bin 下面的 www.js 其实跟 express 差不多,public 也是存放的前端静态文件,看看routes,其实是跟我们之前路由也差不多。views 里面是前端模板文件,也可以不管。
app.js
- 各个插件的作用
- 思考各个插件的实现原理(结合之前学过的知识)
- 处理get请求和post请求
接下来重点看 app.js,app 应该是当前请求的实例,views 插 件是关于前端模板那一个文件夹可以不管,json 这个是处理 postData 里面的数据(json 格式化),bodyparser 是把数据 放到 body 里面(还可以指定格式什么的).
3.路由
const router =nequire( " koa-router" )()
router.prefix(./api/user')//设置父路
router.post('/login ', async function(ctx,next) {
const { username,password } = ctx.request.bodyctx.body = {
errno: 0,
username,
password
}
})
module.exports = router
4.中间件机制
5.实现session
koa2接口开发
- 实现登录;
- 开发路由;
- 记录日志
实现登录:
- 和express类似;
- 基于koa-generic-session和koa-Redis
安装这两个插件(当然还得加上 redis),在 app.js 引用 session 和 koa-redis,然后写的话需要在路由的前面写!
const session = require('koa-generic-session')
const redisStore = require('koa-redis')
6.开发路由准备工作
路由:
- 复用之前代码,如mysql、登录中间件、controller . model
- 初始化路由,并开发接口
- 联调测试
先安装好 xss 和 mysql,拷贝 model 文件夹、conf 文件夹。之 前提到 redis 的配置问题,我们把配置项移到 app.js,根据配置项配置 redis 而不是再写死了(从配置中获取)。 拷贝 mysql.js 到新建的 db 文件夹,拷贝 controller 文件夹, 不管这里面的内容还是需要修改一下,每个函数前面都加一 个 async,在原本的 promise 之前要用 await 即可(里面也可以修改一下,把值取出来,返回整个值)。
const { ErrorModel } = require(../model/resModel')
module.exports = async (ctx,next) =>{// 校验登录状态:未登录已经登录
if (ctx.session.username){
await next()
return
}
ctx.body = new ErrorMode1('尚未登录')
7.开发路由-代码演示
8.日志
日志:
- access log记录,使用morgan
- 自定义日志使用console.log和,console.error
- 日志文件拆分、日志内存分析,之前讲过,不再赘述
这里的 logger 其实只是让我们控制台打印地址什么的比较优 美实际上并没有什么作用,函数需要借助 morgan(仅支持 express)。因此我们需要安装一个插件(koa-morgan)来让 morgan 支持我们的 koa。 新建一个文件夹 logs,下面建一个 access.log。在 app.js 引入 fs、path、和 morgan,然后直接拷贝 express 的内容就行(logger 改成 morgan)。暂时修改下 prd 环境变量的路径来测试。
9.中间件原理-分析
koa2中间件原理:
- 回顾中间件使用;
- 分析怎么实现;
- 代码演示
直接搜 koa.bootcss.com 就可以找到这个示例代码,我们建一 个 koa2-test 文件夹,npm 初始化,建一个 app.js,拷贝示例 代码,安装 koa,直接运行就行。 可以看出来在执行的时候就先注册了三个中间件(但是并不是同时执行,也不是一下子执行完),可以是第一个 next() 执行的话就是在执行第二个中间件(直到第二个中间件执行 完成才算第一个 next()执行完成,才会执行 next()后面 的语句)。 第二个 next 需要等到第三个中间件执行完成才能执行 next 后面的语句才能执行完成第二个中间件(也就是说不同步, 这样子可以先执行最关键的代码,再慢慢补充访问时间啊什么的信息)。 因为是异步啊,当然要等异步的任务完成再接着往下走(因 为前面有 await,那自然不能把异步挂起来),这个就是洋葱圈模型。
就其实第一层洋葱就已经包含第二层洋葱,第二层洋葱又包 含了第三层洋葱... koa2(本身就没有路由功能)的中间件并不涉及路由什么的,仅仅是中间件的注册和传递。