koa 常用api 及其用法

943 阅读1分钟

常用中间件

  • 静态目录

  • 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');
});