Koa是干啥的
- 一个基于node.js平台的web开发框架。
- 由Express原班人马打造。
- 没有捆绑任何中间件,更小。
api
一个无作用的Koa程序被绑定到3000端口
1 | const Koa = require('koa'); |
app.context
app.context是ctx的原型。可给app.context添加其他属性。
ctx上的许多属性都适用getter,setter和object.defineProperty()定义的。
1 | const main = ctx => { |
ctx的属性:
1 | ctx = { |
next
当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件。
1 | const Koa = require('koa'); |
以上输出>> one、>> two、>> three、<< three、<< two、<< one
抛出错误
抛出505错误: Internal Server Error
1 | const main = ctx => { |
抛出404错误: Page Not Found
1 | const main = ctx => { |
处理错误的中间件:让最外层的中间件统一处理所有中间件的错误处理。
1 | const handler = (ctx, next) => { |
localhost:3000页面中显示{message: ‘Internal Server Error’}
error时间的监听
app.on(‘error’,(err,ctx) => { })可以用来监听运行中的错误。
1 | const main = ctx => { |
koa提供的模块
koa-route
koa-route可以用来替代原生路由ctx.request.path
1 | const route = require('koa-route'); |
koa-static
koa-static封装了静态资源的请求。为(图片、字体、样式表)一个一个写路由很麻烦,所以需要统一封装。
1 | const path = require('path'); |
koa-compose
koa-compose模块将多个中间件合成为1个。
1 | const compose = require('koa-compose'); |
koa-body
koa-body模块可以用来从POST请求体中提取键值对
1 | const koaBody = require('koa-body'); |
运行:
1 | $ curl -X POST --data "name=Jack" 127.0.0.1:3000 |
koa-basic-auth
用于用户登录认证。弹出提示框用户名密码,输入正确返回正确对应的body内容。
1 | const auth = require('koa-basic-auth'); |
在请求体中设置Authorization: Basic + base64转换之后的用户名密码

koa-views
views(要渲染的文件path,配置obj)
map: 匹配每一个.html结尾的文件都要用nunjucks模板引擎去渲染。
1 | const views = require('koa-views'); |
koa-session
koa-session中间件默认是基于cookie实现的,并且可以通过传入options.store使用扩展的存储方式(redis,mongoDB)
基于cookie实现的session有缺点:
- session没有加密就存储在客户端
- 浏览器中的cookie总是有长度限制
koa-csrf
作用:用于项目安全加固。Koa2项目安全加固建议–完整版
原理:在你的提交表单里增加一个独有的临时的令牌用于服务器端验证,从而保证提交数据的正确性,防止CSRF攻击
CSRF:跨站请求伪造