如何使用查询参数数组中的一个元素处理请求

How to handle a request with one element in a query param array

我正在为我的 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);
}

这仍然没有解决我的问题。当我用一个关系发出请求时,我仍然得到同样的错误。我该如何解决这个问题?

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