如何使用fastify为不同的参数提供一条具有多个模式的路由



我在使用fastify的中间件中有以下路径:

路线.tsserver.get('/rest/api/cars/:twofourdoor/:autoManual/',{schema:getCarsSchema},getCars(server((;

基本上,用户在这条路线上有四个选项——两个或四个门以及自动或手动。我的.schema中只有一个模式,类似于:schema.ts

const carSchema = {
type: 'object',
properties: {
wheels: { type: 'string' },
color: { type: 'string' },
gears: { type: 'string' },
maxAutoSpeed: { type: 'string' },
maxManualSpeed: { type: 'string' },
twoDoorSize: { type: 'string' },
fourDoorSize: { type: 'string' },
},
};
export const getCarsSchema = {
summary: 'Get cars',
description: 'Get cars by types',
query: querySchema,
response: {
200: {
type: 'object',
properties: {
totalItems: { type: 'number' },
pageNumber: { type: 'number' },
items: { type: 'array', items: carSchema },
},
},
501: logMessageSchema,
},
};

carSchema只是所有汽车属性的列表。我想要的是以下内容:

  1. 我可以使用一个模式为路由中的不同选项返回自定义属性吗
  2. 如果不能实现1,我可以为每个选项组合的路由提供4个不同的模式吗

我不知道该如何处理。谢谢

我可以使用一个模式为路由中的不同选项返回自定义属性吗?

可以。

在本例中,返回的数据是相同的,但有一个端点返回:

# /
{ items: [ { wheels: 4, serial: '123ASC', color: 'red' } ] }
# /no-serial
{ items: [ { wheels: 4, color: 'red' } ] }
const fastify = require('fastify')()
fastify.get('/', {
handler,
schema: {
response: {
200: {
type: 'object',
properties: {
items: {
type: 'array',
items: {
type: 'object',
properties: {
wheels: { type: 'number' },
serial: { type: 'string' },
color: { type: 'string' }
}
}
}
}
}
}
}
})
fastify.get('/no-serial', {
handler,
schema: {
response: {
200: {
type: 'object',
properties: {
items: {
type: 'array',
items: {
type: 'object',
properties: {
wheels: { type: 'number' },
color: { type: 'string' }
}
}
}
}
}
}
}
})
fastify.inject('/', (err, res) => {
console.log(res.json())
})
fastify.inject('/no-serial', (err, res) => {
console.log(res.json())
})
function handler (request, reply) {
reply.send({
items: [
{ wheels: 4, serial: '123ASC', color: 'red' }
]
})
}

相关内容

  • 没有找到相关文章

最新更新