Koa 基础篇(二)—— 路由与中间件

let app = new Koa()

router.get("/",async ctx => {

ctx.body = "hello koa router"

})

app.use(router.routes())

app.use(router.allowedMethods())

app.listen(3000)

运行项目,在浏览器访问本地3000端口,在页面上就会看到输出的语句。这就是最简单的路由。

<>获取查询字符串

其实,不知不觉的,在上面的例子中已经处理了一个 GET 请求。那么,如何获取到 GET 请求中的查询字符串呢?

示例:

router.get("/news",async ctx => {

console.log(ctx.query)

ctx.body = "hello koa router"

})

很简单,通过 ctx.query 就可以获取到所有的查询字符串(被封装为一个对象)。

<>动态路由匹配

通过语法 :param 来指定动态路由。

示例:

router.get("/news/:id",async ctx => {

console.log(ctx.params)

ctx.body = "hello koa router"

})

通过 ctx.params 就可以获取到所有动态路由参数(被封装为一个对象)。

<>处理 post 请求

处理 post 请求并不是一件困难的事,直接使用 router.post() 就可以处理了,问题就在于如何获取 post 请求的请求体。

在原生的 node.js 中,post 请求提交的数据是由一个个数据块来组成的,所以在接收的时候需要手动进行拼接,这无疑带来不友好的体验,所以,使用第三方中间件 koa-bodyparser 来进行请求体的解释。

  1. 安装

npm install --save koa-bodyparser

  1. 引入

const parser = require("koa-bodyparser")

app.use(parser())

  1. 使用

router.post("/login",async (ctx,next) => {

console.log(ctx.request.body)

ctx.body = "login success"

})

通过 ctx.request.body 就可以获取到 post 请求体的内容了。

<>中间件


中间件就是匹配路由之前或匹配路由完成后做的一系列操作。

可以通过中间件来执行代码,修改请求和响应对象,调用堆栈中的下一个中间件。

<>应用级中间件

需求:在处理所有请求之前都要打印当前的时间。

显然,不可能在每个路由中都插入一段代码来完成这个工作,所以此时就需要用到中间件了。

示例:

app.use(async (ctx,next) => {

console.log(new Date())

await next()

})

router.get("/news",async (ctx,next) => {

console.log("news")

ctx.body = "this is news page"

})

router.get("/home",async (ctx,next) => {

console.log("home")

ctx.body = "this is home page"

})

在上面的例子中,通过一个 use 方法,作为所有路由的 "拦截器" ,在处理所有路由之前先执行了这个路由里面的逻辑。

<>路由中间件

只处理某个具体路由的中间件。

示例:

router.get("/news",async (ctx,next) => {

console.log("news")

await next()

})

router.get("/news",async (ctx,next) => {

ctx.body = "this is news page"

})

访问该路由时,会在控制台打印输出,在页面上也会有对应的显示。这说明访问一个 url 由两个路由处理了。

<>错误处理中间件

ctx 对象中,有一个 status 属性用于表示响应状态码,从而可以通过响应状态码来进行简单的错误处理。

示例:

app.use(async (ctx,next) => {

if(ctx.status === 404){

ctx.body = "404 page"

}

await next()

})

<>第三方中间件

第三方中间件就是使用第三方的包进行处理的中间件。比如,使用第三方中间件 koa-static 进行静态资源的托管。

  1. 安装
相关推荐
阿昌喜欢吃黄桃16 天前
RocketMq事务消息原理
java·中间件·消息队列·rocketmq·mq
半夜修仙17 天前
延迟队列的介绍及常见问题
java·数据库·中间件·rabbitmq
手握风云-17 天前
一条消息的旅程:RabbitMQ 学习与实践(一)
中间件·rabbitmq
RH23121118 天前
2026.6.8Linux
java·数据库·中间件
理人综艺好会19 天前
双Token机制在实际项目中的应用与实践
中间件·token
番茄去哪了19 天前
神领物流面试题(一)
java·大数据·中间件
念何架构之路19 天前
消息中间件
中间件
都说名字长不会被发现19 天前
Spring Boot Starter 中间件账号密码加密方案设计与实现
java·spring boot·后端·中间件
瀚高PG实验室20 天前
java中间件无法连接数据库
java·数据库·中间件·瀚高数据库
之歆20 天前
Day11_Express 深入解析:从中间件到项目实战
中间件·express