ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

koa

2022-02-07 15:02:42  阅读:194  来源: 互联网

标签:body const koa 中间件 ctx router


安装

  •  npm i 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')
})
  • 导入koa并实例化,编写中间件,启动服务并监听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')
})
  • 为什么输出的结果是 1 3 5 4 2
  • 当一个中间件执行  next() 则该中间件会暂停并执行下一个中间件,下一个中间件执行完毕后才会执行该中间件  next 后面的代码

ctx

  • ctx 中包含了基于原生  http 请求和响应的封装

路由

  •  npm i koa-router 
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
  • 处理body参数需要借助一个中间件  npm install koa-body 
  • 并且在注册中间件时,需要在注册路由中间件之前注册

错误处理

  • 404 当请求的资源找不到或者没有通过  ctx.body  返回时,koa会自动返回404
  • 手动抛出 通过 ctx.throw 抛出的
  • 500 运行时错误

使用中间件来处理错误

  •  npm install --save koa-json-error 
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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有