koa2的中间件功能及应用示例

2020-06-17 07:59:25易采站长站整理

– onerror:支持自定义错误句柄,如果koa-bodyparser抛出一个错误,您可以自定义响应如下:


app.use(bodyparser({
onerror: function (err, ctx) {
ctx.throw('body parse error', 422);
}
}));

– disableBodyParser:可以通过设置ctx动态禁用body解析器。disableBodyParser = true。


app.use(async (ctx, next) => {
if (ctx.path === '/disable') ctx.disableBodyParser = true;
await next();
});
app.use(bodyparser());

koa-logger

请求响应监听日志

下载


npm i koa-logger

使用


~~// 引入日志中间件
const logger = require('koa-logger');

// 注册日志中间件
app.use(logger()); ~~

koa-session

用于Koa的简单会话中间件。默认为基于cookie的会话,并支持外部存储。

session

我们知道,http协议是无状态的,当用户进行登录后,并不会保存账户密码,如果我们需要维持用户的登录状态,就需要使用一些方法。目前主流的用户认证方法有基于token和基于session两种方式。

基于token的认证可以使用koa-jwt中间件,基于session的认证则使用标题的koa-session。

下载


npm i koa-session

使用

app.js 入口文件中注册session


const CONFIG = {
key: 'koa:sess', /** (string) cookie key (default is koa:sess) */
/** (number || 'session') maxAge in ms (default is 1 days) */
// 状态保存最大时间,默认为一天
maxAge: 86400000,
autoCommit: true, /** (boolean) 自动保存头部 (default true) */
overwrite: true, /** (boolean) 能否覆盖 (default true) */
httpOnly: true, /** (boolean) httpOnly or not (default true) */
signed: true, /** (boolean) signed or not (default true) */
/** (boolean) 强制在每个响应上设置会话标识符cookie。过期将重置为原始maxAge,重新设置过期倒计时。 (default is false) */
rolling: false,
/** (boolean) 当会话快过期时续订会话,这样我们可以始终保持用户登录。(default is false)*/
renew: false,
};

// 如果你所有都为默认配置,则不需要传递配置参数,app.use(session(app))即可
app.use(session(sessionConfig, app));

session的使用

注册后可以通过上下文ctx找到session属性,下面代码将用户信息存入session属性中,并创建key和value

user.js


// 用户登录