【问题标题】:How to handle a request with one element in a query param array如何使用查询参数数组中的一个元素处理请求
【发布时间】:2021-01-21 03:31:53
【问题描述】:

我正在为我的 api 使用 this 样板。

我有以下路线:GET /questions

在这条路线中,我不想动态获取数据中的关系,例如GET /questions?relations=user?relations=answer。这工作得很好,但是当我不只想要一个关系时,例如GET /questions?relations=user 我收到以下错误:

{
    "name": "ParameterParseJsonError",
    "message": "Given parameter relations is invalid. Value (\"user\") cannot be parsed into JSON.",
    "errors": []
}

这是请求:

@Get()
public find(@QueryParam('relations') relations: string[]): Promise<Question[]> {
    return this.questionService.find(relations);
}

问题似乎是,它将查询参数识别为字符串而不是字符串数组,因此无法将其转换为数组。我的下一个想法是创建一个如下的联合类型:

public find(@QueryParam('relations') relations: string[] | string): Promise<Question[]> {
    let _relations: string[] = [];
    if (typeof relations === 'string') {
        _relations.push(relations);
    } else {
        _relations = relations;
    }
    return this.questionService.find(_relations);
}

这仍然不能解决我的问题。当我向一个关系提出请求时,我仍然得到同样的错误。我该如何解决这个问题?

【问题讨论】:

    标签: typescript express routing-controllers


    【解决方案1】:

    嗯,我找到了解决方案,但我之前没有找到这个解决方案,这让我很烦恼。如果您发送如下请求:GET /question?relations=user,则值作为字符串发送。在您发送第二个值时,查询变成了一个数组。要正确判断查询是一个数组,您可以执行以下操作:GET /questions?relations[]=user。我没有使用这个,因为我认为GET /questions?relations=user 是标准的。

    【讨论】:

      猜你喜欢
      • 2023-01-18
      • 2018-03-08
      • 2020-09-13
      • 2014-01-22
      • 2016-08-17
      • 1970-01-01
      • 2021-08-28
      • 2017-04-24
      • 2019-12-20
      相关资源
      最近更新 更多