其他分享
首页 > 其他分享> > koa

koa

作者:互联网

安装

基本使用

const Koa = require('koa')
const app = new Koa()

app.use(ctx => {
  ctx.body = 'hello koa'
})

app.listen(3000, () => {
  console.log('server is running on http://localhost:3000')
})

什么是中间件

洋葱圈模型

const Koa = require('koa')
const app = new Koa()

app.use((ctx, next) => {
  console.log(1);
  next() // 等待下一个中间件执行完毕后再执行 next 函数后面的代码
  console.log(2)
})

app.use((ctx, next) => {
  console.log(3);
  next() // 等待下一个中间件执行完毕后再执行 next 函数后面的代码
  console.log(4);
})
app.use(ctx => {
  console.log(5);
  ctx.body = '处理完成'
})

app.listen(3000, () => {
  console.log('server is running on http://localhost:3000')
})

ctx

路由

const Koa = require('koa')
const Router = require('koa-router')
const app = new Koa()
const router = new Router() // 实例化路由对象
// 编写路由规则
router.get('/', ctx => {
  ctx.body = '这是主页'
})

router.get('/users', (ctx) => {
  ctx.body = '这是用户页'
})
router.post('/users', (ctx) => {
  ctx.body = '创建用户'
})

// 注册路由中间件
app.use(router.routes())

app.listen(3000, () => {
  console.log('server is running on http://localhost:3000')
})

参数处理

const Router = require('koa-router')
// 创建路由实例并添加路由前缀
const router = new Router({prefix: '/users'})

// GET /users?name=zs&age=66 -- 获取query查询参数
router.get('/', (ctx) => {
  const query = ctx.query
  ctx.body = query
})

// GET /users/:id --- 动态params路由参数获取
router.get('/:id', (ctx) => {
  const params = ctx.params
  ctx.body = params
})

// POST /users -- 处理body参数
router.post('/', (ctx) => {
  const body = ctx.request.body;
  console.log(body);
  ctx.body = '创建用户'
})

module.exports = router

错误处理

使用中间件来处理错误

const Koa = require('koa')
const Router = require('koa-router')
const koaBody = require('koa-body')
const error = require('koa-json-error')
const app = new Koa()
const router = new Router() // 实例化路由对象

const userRoute = require('./router/users')
router.get('/', ctx => {
  ctx.body = '这是主页'
})
// 注册 处理错误中间件
app.use(error({
  format: (err) => {
    return {code: err.status, message: err.message, result: err.stack}
  },
}))
app.use(koaBody())
app.use(router.routes())
app.use(userRoute.routes())


router.get('/test', (ctx) => {
  ctx.throw(422, '参数格式不正确') // koa-json-error中间件自动处理该错误
})

app.listen(3000, () => {
  console.log('server is running on http://localhost:3000')
})

 

标签:body,const,koa,中间件,ctx,router
来源: https://www.cnblogs.com/xiebenyin-/p/15867772.html