yarn add koa koa-static
koa-router
axios
cookie+session
jwt
application/x-www-form-urlencoded . ======> . a=b&c=d
router.post('/login',async(ctx,nnext)=>{
let arr = []
ctx.req.on('data',function(data){
arr.push(data)
})
ctx.req.on('end',function(){
Buffer.concat(arr).toString()
ctx.body = r
})
// 返回的是undefined
因为不会await等
})
封装一下 改写成下面的写法
function bodParse(ctx){
return new Promise((resolve,reject)=>{
let arr = []
ctx.req.on('data',function(data){
arr.push(data)
})
ctx.req.on('end',function(){
let r= Buffer.concat(arr).toString()
resolve(r)
})
})
}
router.post('/login',async(ctx,nnext)=>{
ctx.body = await bodParse(ctx)
})
封装bodyParser中间件
结果挂载到某一个属性上
function bodyParser(){
return async (ctx,next)=>{
await new Promise((resolve,reject)=>{
let arr = []
ctx.req.on('data',function(data){
arr.push(data)
})
ctx.req.on('end',function(){
let r= Buffer.concat(arr).toString()
ctx.request.body = r
resolve()
})
})
await next()
}
}
使用自己封装的中间件
router.post('/login',async(ctx,nnext)=>{
ctx.body = ctx.request.body;
})
第三方body-parser
yarn add koa-bodyparser
// 解析请求体
let bodyParser = require('koa-bodyparser')
app.use(bodyParser())
koa-session
app.keys = ['a','b']
// 密钥
let session =require('koa-session')
app.use(sesssion({
maxAge:5*1000
},app))
router.post('/login',async(ctx,next)=>{
ctx.sessionn.user = ctx.request.body;
ctx.body = ctx.session.user
})
//登录验证
router.get('/home',async(ctx,nnext)=>{
if(ctx.session.user){
ctx.body = {
status:1,
username:ctx.session.user.username
}
}else {
ctx.body = {
status:0,
username:null
}
}
})
axios路由拦截 。 页面级别拦截
interceptors 拦截响应结果 返回promise
return Promise.reject // 如果登录状态为0
否则return res.data 作为下一个promise的结果
jwt 多个session 多个服务器共享的优势
router.get('/baidu',async(ctx,next)=>{
ctx.redirct('https://baidu.com')
})
表单提交 name='passport'
form
action = ‘/fileupload’
enctype = 'application/x-www-form-urlencoded'
method = 'POST'
文件
enctype = 'multipart/form-data'
input type='file'
文件上传的插件解析传入的上传文件的数据
express中文件上传使用multer
npm install koa-better-body
let betterBody = require('koa-better-body')
// 过期了的koa 3.0不支持
转化 generator函数为async await 用convert
let convert = require('koa-convert')
// 新建upload文件夹 放上传的文件
app.use(betterBody({
uploadDir:path.resolve(__dir,'upload')
// 挂载到ctx.request.fields
}))
router.post('/fileupload',async(ctx,netx)=>{
ctx.body = ctx.request.fields
})