推荐答案
在 Fastify 中,定义路由的基本语法如下:
fastify.route({
method: 'HTTP方法', // 例如 'GET', 'POST', 'PUT', 'DELETE' 等
url: '/路由路径', // 例如 '/users', '/users/:id' 等
handler: async (request, reply) => {
// 处理请求的逻辑
return { message: 'Hello, Fastify!' };
}
});示例代码
// www.javascriptcn.com code example
const fastify = require('fastify')({ logger: true });
fastify.route({
method: 'GET',
url: '/users',
handler: async (request, reply) => {
return { users: ['Alice', 'Bob', 'Charlie'] };
}
});
fastify.listen(3000, (err) => {
if (err) {
fastify.log.error(err);
process.exit(1);
}
fastify.log.info('Server is running on http://localhost:3000');
});本题详细解读
1. method 参数
method 参数用于指定 HTTP 请求方法,常见的值包括 GET、POST、PUT、DELETE 等。Fastify 支持所有标准的 HTTP 方法。
2. url 参数
url 参数用于定义路由的路径。路径可以是静态的(如 /users),也可以是动态的(如 /users/:id)。动态路径中的参数可以通过 request.params 访问。
3. handler 参数
handler 是一个异步函数,用于处理请求并返回响应。它接收两个参数:
request:包含请求的所有信息,如请求头、请求体、查询参数等。reply:用于发送响应,可以设置状态码、响应头、响应体等。
4. 异步处理
Fastify 的 handler 函数通常是异步的,因此可以使用 async/await 语法来处理异步操作。返回的值会自动被序列化为 JSON 并发送给客户端。
5. 路由前缀
Fastify 还支持为路由添加前缀,可以通过 fastify.register 方法来实现:
// www.javascriptcn.com code example
fastify.register(async (fastify, options) => {
fastify.route({
method: 'GET',
url: '/users',
handler: async (request, reply) => {
return { users: ['Alice', 'Bob', 'Charlie'] };
}
});
}, { prefix: '/api' });在这个例子中,路由 /users 的实际路径将是 /api/users。
6. 路由选项
Fastify 的路由定义还支持其他选项,如 schema 用于请求和响应的验证,preHandler 用于在请求处理之前执行中间件等。
// www.javascriptcn.com code example
fastify.route({
method: 'POST',
url: '/users',
schema: {
body: {
type: 'object',
required: ['name'],
properties: {
name: { type: 'string' }
}
}
},
handler: async (request, reply) => {
const { name } = request.body;
return { message: `User ${name} created` };
}
});在这个例子中,schema 用于验证请求体,确保 name 字段存在且为字符串类型。