如何使用查询参数数组中的一个元素处理请求
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
是标准的。
我正在为我的 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
是标准的。