在 Swagger OpenApi 3.0 中将数组作为查询参数传递

Pass array as query parameter in Swagger OpenApi 3.0

我目前给出了以下代码来获取一组值作为查询参数(在 Node-express、nodejs v14.17 和 OpenAPI 版本 3.0.1 中),

       - name: abcd
          description:  abcd
          in: query
          required: false
          schema:
            type: array
            items:
              type: string

但它仅在至少有两个值的情况下将请求作为值数组(类型为 object)发送。对于单个值,类型是 string。如何始终将 req 获取为数组本身?

例如, 如果我给一个值说“你好”, console.log(typeof(req.query["abcd"]),req.query["abcd"]) O/P: string Hello 但如果我给出“Hello”和“World”, O/P: object ['Hello','World']

正如 this answer 所解释的那样,当查询参数传递一个值时,例如?abcd=hello,Express 将其解析为常规值(即字符串)而不是数组。

要传递单值数组,需要在查询参数名末尾追加[],即?abcd[]=hello。这意味着您需要更改 OpenAPI 文件中的参数名称:

       - name: abcd[]    # <------------
         description:  abcd
         in: query
         required: false
         schema:
           type: array
           items:
             type: string