常用中间件
-
静态目录
-
koa-body
用于解析 multipart/form-data application/x-www-urlencoded application/json application/json-patch+json application/vnd.api+json application/csp-report
- koa2-router
- koa-session
- koa-mongoose
- koa-static
ctx 属性
app.use(async (ctx, next) => {
ctx.request.body // 请求体内容 koa的request
ctx.response.body // 请求体内容 koa的response
ctx.req // http req
ctx.res // http res
))
测试例子
const koa = require('koa');
const koaBody = require('koa-body');
const koaStatic = require('koa-static');
const Router = require('koa2-router');
const router = new Router();
const app = new koa();
app.keys = ['im a newer secret', 'i like turtle'];
app.use(koaBody());
app.use(koaStatic('html')); // 可以设置第二个参数 opt 设置缓存
app.use(async (ctx, next) => {
console.log('body', ctx.request.body);
// console.log('body', ctx.cookies);
console.log('未签名的cookie:', ctx.cookies.get('my-cookie'));
console.log('签名的cookie:', ctx.cookies.get('my-cookie', {signed: 'my-sign'}));
console.log('request headers', ctx.request.headers); // console.log(response.get('my-header')
console.log('request url', ctx.request.url);
console.log('request path', ctx.request.path);// mime类型
console.log('request method', ctx.request.method);
console.log('request querystring', ctx.request.querystring); // 只对get有效
console.log('request search', ctx.request.search); // 只对get有效
console.log('request type', ctx.request.type); // mime类型
console.log('request query', ctx.request.query); // 查询的对象 只对get有效
console.log('request charset', ctx.request.charset);
await next()
// 临时重定向
// ctx.status = 301;
// ctx.redirect('/cart');
// request.charset
ctx.response.set('my-header', 'header-value');
// response.remove(field) // 删除请求头
ctx.response.body = {
token: '324234'
};
})
app.use((ctx, next) => {
ctx.cookies.set('my-cookie', 'value-1223', { maxAge: Date.now() + 60 * 1000 });
ctx.cookies.set('signed-cookie', 'signed-value-1223', { maxAge: Date.now() + 60 * 1000, signed: true });
next() // 必须调用
});
router.use('/', (ctx, next) => {
console.log('router next use');
next();
})
router.post('/login', async (ctx, next) => {
console.log('-------------', ctx.request.body);
next(); // 不会执行
})
router.get('/api/:id', async (ctx, next) => {
console.log('params', ctx.params.id);
next()
})
app.use(router);
app.on('error', err => {
// log.error('server error', err)
console.log('err', err);
});
app.listen(3002, () => {
console.log('server running');
});