如何在流式模式中返回array()?

时间:2019-12-11 21:24:51

标签: javascript fastify

我有一个看起来像这样的对象:

interface LotteryData {
  PROP1: string;
  PROP2: string;
  PROP3: string;
  PROP4: string;
  PROP5: string;
}

interface LotterySuccess {
  name: string;
  data: Array<LotteryData>;
}

我的模式如下:

const successResponseSchema = S.object()
  .title('About 200 response')
  .description('Some description')
  .prop('name', S.string())
  .definition('data', S.array());

使用邮递员时,我会得到名字,但没有得到数据。

我也尝试过:

const successResponseSchema = S.object()
  .title('About 200 response')
  .description('Some description')
  .prop('name', S.string())
  .prop('data', S.anyOf([S.object()]));

这里的数据为空,我理解,因为我将数据发送回数组而不是对象。

处理请求的处理程序如下:

const handler = async (req, reply) => {
  const responseData = await fileManager();

  const response: LotterySuccess = {
    name: responseData.Name,
    data: responseData.Data,
  };

  reply.send(response);
};

export default (server: FastifyInstance) =>

  server.get<null>('/', opts, handler); 

responseData.Data具有正确的值,但是我无法使我的成功模式与之对应 对象数组。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

其中一个寻求几个小时,一旦您最后提出问题,您也会找到答案。

想保留这个问题,因为这不容易找到。 我通过反复试验弄清楚了这一点。

发现this会有所帮助。

我的最终解决方案:

const successResponseSchema = S.object()
  .title('About 200 response')
  .description('Some description')
  .prop('name', S.string())
  .prop(
    'data',
    S.array().items(
      S.object()
        .prop('PROP1', S.string())
        .prop('PROP2', S.string())
    )
  );

说实话,我不认为这是涵盖所有内容的答案。我无法解释为什么必须这样。如果有人可以解释那部分,那就太好了。希望以后我可以更详细地更新此答案。

编辑: @Manuel Spigolon在评论中给出了一些指示。

以上更改为:

const successResponseSchema = S.object()
  .title('About 200 response')
  .description('Some description')
  .prop('name', S.string())
  .prop('data', S.array().items(S.object().additionalProperties(true)));

这样,我不必添加每个道具。