【发布时间】:2021-12-12 13:45:53
【问题描述】:
我有 NestJS 应用程序,我必须从 URL 获取查询。问题是我的 creationDate 是一个对象,我无法通过 @Query 将它作为嵌套对象。
以下是路线示例:
xxx/yyy/orders?key1=value&key2=value&key3=value&createdAt[lte]=2021-07-01&createdAt[gte]=2011-03-30&orderBy=desc&limit=500
我正在尝试将 createdAt[lte] 和 createdAt[gte] 作为嵌套对象
export interface QueryI {
key1: string;
key2: string;
key3: string;
key4: string;
createdAt: {
lte: string,
gte: string,
}
orderBy: 'desc' | 'asc';
limit: number;
}
这是我的控制器:
@Get('route')
getAll(
@Query() query: QueryI): Promise<void> {
return this.myService.findAll(query);
}
但这给了我以下结果
{
key1: 'value',
key2: 'value',
key3: 'value',
key4: 'value',
'createdAt[lte]': 'some date',
'createdAt[gte]': 'some date',
orderBy: 'desc',
limit: '500'
}
我尝试过 JSON.stringify 并在 SOW 上咨询过类似的问题,但没有运气。
谢谢
【问题讨论】:
-
你的 HTTP 引擎是什么?你通过什么发送请求?它可能没有正确编码查询参数
-
不知道你说的HTTP引擎是什么意思,但是我用postman来测试一下。
-
我所说的 HTTP 引擎,是指 express 或 fastify,它们是 Nest 可以使用的底层引擎。使用
curl发送有效的请求:curl 'http://localhost:3000/?key1=value1&key2%5Binner1%5D=hello&key2%5Binner2%5D=world',而无效:'http://localhost:3000/?key1=value&key2[inner1]=hello&key2[inner2]=world'。所以就像我说的,这可能是一个查询参数编码问题 -
我使用 Fastify 和 NestJs。我无法更改即将到来的 URL 的编码。我正在构建一个连接 3 个不同 API 的连接器。这是我无法控制的传入请求。我有机会让它工作吗?谢谢
标签: javascript node.js typescript nestjs routeparams