开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情
koa基础
安装
npm i koa -S
//响应时间输出中间件
app.use(async (cxt, next) => {
await next();
const rt = ct.response.get('X-Response-Time');
console.log(${cxt.method} ${cxt.url}-${rt});
})
//错误处理中间件
app.use(async(ctx, next) => {
try{
await next();
}catch (error) {
//响应客户
ctx.status = error.statusCode || error.status || 500;
ctx.body = error.message;
//触发应用层级错误时间
ctx.app.emit('error', error, ctx);
console.log('捕捉到的错误', error.message);
}
})
触发错误
app.user(async (ctx, next) => {
ctx.throw(401, '认证失败')
})
全局错误事件
app.on("error", err => {
console.log('全局错误处理', err.message);
})
静态文件服务npm i -S koa-static
const static = require("koa-static");
app.use(static(__dirname + '/public'))
模板引擎npm i koa-hbs@next -S
const hbs = require('koa-hbs')
app.use(hbs.middleware({
viewPath: __dirname + "/views", //视图根目录
defaultLayout: 'layout', //默认布局页面
partialsPath: _dirname + '/views/partials ', //注册partial目录
disableCache: true //开发阶段不缓存
}))
Koa鉴权session
Koa中使用session npm i koa-session -S
app.keys = ['secret', 'another secret'];
const SESS_CONFIG = {
key: 'zzb:sess',
maxAge: 86400,
httpOnly: true,
signed:true,
}
####session实现原理
服务器端在接受客户端首次访问时,在服务器端创建session,将session保存在redis中
给这个session生成一个唯一的标识字符串,在响应头中标识唯一字符串
浏览器中收到响应会解析响应由,将sid保存在本地cookie中,流量拿起在下次请求的请求头中会带上该域名下的cookie信息
使用redis存储session
安装 npm i -S Koa-redis
const redisStore = require('koa-redis');
const redis = require('redis');
const client = redis.createClient(6379, "localhost");
token验证
判断是否存在token,如果存在的话,则每个http header都加上token
config.headers.common["Authorization"] = "Beearer" + token;
Koa解决跨域问题
var koa = require('koa');
var cors = require('koa2-cors');
var app = new koa();
app.use(cors());
文件上传,表单校验
安装koa-multer npm i koa-multer -S
安装koa-bouncer npm i -S koa-bouncer
配置 app.js
//为koa上下文扩展一些校验的方法
app.use(bouncer.middleware());
图形验证码
安装trek-captcha npm i trek-captcha -S
发送短信
安装依赖 npm i -S moment md5 axios
生成6位随机数字验证码,发送请求,
短信发送成功,存储验证码到session中,也可以设置过期时间