Node.js 面试题
目录

请解释 Fastify 的路由 (Routing) 机制。如何定义和使用路由?

· 约 4 分钟读完 · 第 370 / 377 章

推荐答案

Fastify 的路由机制是基于其高性能的路由匹配引擎构建的。它允许开发者通过简洁的 API 定义路由,并支持异步处理请求。Fastify 的路由定义方式类似于 Express,但性能更高,尤其是在处理大量路由时。

定义路由

在 Fastify 中,路由可以通过 fastify.route() 方法或 fastify.get()、fastify.post() 等快捷方法来定义。每个路由都需要指定 HTTP 方法、路径和处理函数。

使用路由

定义好路由后,Fastify 会自动处理请求并将它们路由到相应的处理函数。处理函数可以是同步的,也可以是异步的。Fastify 支持 Promise 和 async/await,使得异步代码更加简洁。

本题详细解读

路由定义

Fastify 的路由定义非常灵活,支持多种 HTTP 方法(如 GET、POST、PUT、DELETE 等),并且可以通过 fastify.route() 方法或快捷方法(如 fastify.get()、fastify.post() 等)来定义。每个路由都需要指定以下参数:

  • method: HTTP 方法,如 GET、POST 等。
  • url: 路由路径,可以是字符串或正则表达式。
  • handler: 处理函数,用于处理请求并返回响应。

路由处理函数

路由处理函数接收两个参数:request 和 reply。request 对象包含请求的所有信息,如请求头、请求体等。reply 对象用于发送响应,可以通过 reply.send() 方法返回数据。

异步处理

Fastify 支持异步处理函数,可以使用 async/await 或返回 Promise。这使得处理异步操作(如数据库查询、文件读取等)变得更加简单。

路由前缀

Fastify 还支持为路由添加前缀,可以通过 fastify.register() 方法将一组路由注册到一个前缀下:

路由参数

Fastify 支持动态路由参数,可以通过 :param 语法定义:

路由钩子

Fastify 提供了丰富的钩子(Hooks),可以在路由处理前后执行一些操作,如验证请求、记录日志等。常见的钩子包括 onRequest、preHandler、onSend 等。

通过这些机制,Fastify 提供了强大且灵活的路由功能,能够满足各种复杂的应用场景。