推荐答案
Fastify 的 route
方法用于定义应用程序的路由。它允许你指定 HTTP 方法、URL 路径、处理函数以及其他选项(如 schema 验证、前置钩子等)。通过 route
方法,你可以将请求映射到特定的处理逻辑上。
-- -------------------- ---- ------- --------------- ------- ------ ---- ----------- ------- - -- ------ ---- ------ -- -------- ----- --------- ------ -- - ------ - -------- ----- -- -- ------- ------ -- - ---
本题详细解读
1. route
方法的基本结构
route
方法接受一个对象作为参数,该对象包含以下主要属性:
- method: 指定 HTTP 方法,如
GET
、POST
、PUT
、DELETE
等。 - url: 指定路由的 URL 路径。
- schema: 可选,用于定义请求和响应的 JSON schema,Fastify 会自动进行验证。
- handler: 处理请求的函数,接收
request
和reply
两个参数。 - preHandler: 可选,在
handler
之前执行的钩子函数。 - onRequest: 可选,在请求到达时执行的钩子函数。
- onResponse: 可选,在响应发送后执行的钩子函数。
2. handler
函数
handler
是处理请求的核心函数,它接收两个参数:
- request: 包含请求的所有信息,如 headers、query、params、body 等。
- reply: 用于发送响应,可以设置状态码、headers、body 等。
handler: async (request, reply) => { const { name } = request.query; return { message: `Hello, ${name}` }; }
3. Schema 验证
Fastify 支持通过 JSON schema 对请求和响应进行验证。你可以在 schema
属性中定义请求参数、请求体、响应体的结构。
-- -------------------- ---- ------- ------- - ------------ - ----- --------- ----------- - ----- - ----- -------- - -- --------- -------- -- --------- - ---- - ----- --------- ----------- - -------- - ----- -------- - - - - -
4. 钩子函数
Fastify 提供了多种钩子函数,允许你在请求处理的不同阶段执行自定义逻辑。
- onRequest: 在请求到达时执行。
- preHandler: 在
handler
之前执行。 - onResponse: 在响应发送后执行。
preHandler: async (request, reply) => { // 在 handler 之前执行的逻辑 }
5. 路由的嵌套
Fastify 支持路由的嵌套,你可以通过 prefix
选项为路由组添加前缀。
-- -------------------- ---- ------- ---------------------- --------- ----- -- - --------------- ------- ------ ---- ---------- -------- ----- --------- ------ -- - ------ - -------- ----- -- - ------ ------ -- - --- -- - ------- ----- ---
通过 route
方法,Fastify 提供了灵活且强大的路由定义方式,能够满足各种复杂的应用场景。