簡體   English   中英

如何在 Nest.js 中獲取嵌套的 URL 查詢

[英]How to get nested URL query in Nest.js

我有 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 的類似問題,但沒有運氣。 謝謝

QueryI從接口切換到類。

在 NestJS 7 上工作。

用於測試的網址

http://localhost:3000/api/v1/store/search?nestedObj[key1]=yolo&nestedObj[key2]=sup%20bruh&el=test

使用的 DTO

export class TestDto {
  el: string;
  nestedObj: {
    key1: string;
    key2: string;
  };
}

控制器

@Controller('v1/store')
@UsePipes(new ValidationPipe({ exceptionFactory: getFormattedErrors }))
@UseFilters(DomainExceptionFilter)
export class TestController{
@Get('search')
  public async searchStore(@Query() testDto: TestDto) {
    console.log(testDto);
    return 1;
  }
}
// Console log - { nestedObj: { key1: 'yolo', key2: 'sup bruh' }, el: 'test' }

好吧,我找到了一個部分解決方案,我會在這里發布它,直到出現更好的答案:我正在將嵌套屬性提取到單獨的查詢中並創建我的模型。 它並不完美,但它現在正在做這項工作......

控制器.ts

 getAllOrders(
    @Query() query,
    @Query('createdAt[lte]') lte: string, 
    @Query('createdAt[gte]') gte: string): Promise<void> { 
    const mappedObject = new QueryParameters(query, lte, gte)
    return this.orderService.findAll(erpCode, mappedObject);
}

createdAtModel.ts

    export class CreatedAt {
    lte: string;
    gte: string;

    constructor(lte: string, gte: string){
        this.lte = lte;
        this.gte = gte;
    };
}

我的-model.ts

import { CreatedAt } from "./created-at";

export class QueryParameters {
    //other keys
    createdAt: CreatedAt;

    constructor(query, lte, gte){
        //other keys
        this.createdAt = new CreatedAt(lte, gte)
    }
}

我確信更好的答案在於使用 NestJS 驗證管道,但我沒能找到適合我的那個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM