Как преобразовать ответ API в Nestjs? - PullRequest
1 голос
/ 10 июля 2019

Я использую Сериализация гнезда для преобразования ответа API. Тем не менее, он возвращает действительно загадочный результат. Я ожидаю, что это вырежет некоторые поля из данных, но по какой-то причине показывает странный результат.

product.entity.js

export class ProductEntity {
    id: string
    description: string
    status: boolean
    price: string
    moq: number
    rating: number
    last_modified: string

    constructor(partial: Partial<ProductEntity>) {
        Object.assign(this, partial)
    }
}

product.controller.ts

@UseInterceptors(ClassSerializerInterceptor)
@Get()
async findAll(
    @Query('page') page: number,
    @Query('per_page') per_page: number
): Promise<ProductEntity[]> {
    if (!page && !per_page) {
        throw new BadRequestException('Proper query params not supplied')
    }
    const data: ProductEntity[] = []
    const products: any = await this.productService.findAll({
        page,
        per_page
    })

    products.map(product => {
        data.push(new ProductEntity(product))
    })
    return data
}

product.service.ts

async findAll(query): Promise<Product[]> {
    const { page, per_page }: { page: number; per_page: number } = query
    const from: number = (page - 1) * per_page

    return this.productModel
        .find()
        .skip(from)
        .limit(Number(per_page))
}

, который возвращает,

   "$__": {
        "strictMode": true,
        "selected": {},
        "getters": {},
        "_id": {
            "_bsontype": "ObjectID",
            "id": {
                "type": "Buffer",
                "data": [
                    93,
                    15,
                    149,
                    140,
                    78,
                    148,
                    77,
                    10,
                    10,
                    105,
                    51,
                    130
                ]
            }
        },
        "wasPopulated": false,
        "activePaths": {
            "paths": {
                "moq_type": "init",
                "moq": "init",
                "price_type": "init",
                "price": "init",
                "name": "init",
                "category_id": "init",
                "company_id": "init",
                "short_description": "init",
                "long_description": "init",
                "active": "init",
                "variations": "init",
                "keywords": "init",
                "photos": "init",
                "_id": "init",
                "created_at": "init",
                "updated_at": "init",
                "__v": "init"
            },
            "states": {
                "ignore": {},
                "default": {},
                "init": {
                    "_id": true,
                    "short_description": true,
                    "long_description": true,
                    "active": true,
                    "variations": true,
                    "keywords": true,
                    "photos": true,
                    "name": true,
                    "price": true,
                    "price_type": true,
                    "moq": true,
                    "moq_type": true,
                    "category_id": true,
                    "company_id": true,
                    "created_at": true,
                    "updated_at": true,
                    "__v": true
                },
                "modify": {},
                "require": {}
            },
            "stateNames": [
                "require",
                "modify",
                "init",
                "default",
                "ignore"
            ]
        },
        "pathsToScopes": {},
        "cachedRequired": {},
        "session": null,
        "$setCalled": [],
        "emitter": {
            "_events": {},
            "_eventsCount": 0,
            "_maxListeners": 0
        },
        "$options": {
            "skipId": true,
            "isNew": false,
            "willInit": true
        }
    },

Я что-то здесь не так делаю или это неправильный способ преобразования ответа API?

1 Ответ

2 голосов
/ 10 июля 2019

Не уверен насчет NestJS, но в обычном node.js для mongodb. Если вы вызываете find() таким образом X().X().X(), вам нужно добавить в конце конвейера вызов метода exec(), как:

   this.productModel
            .find()
            .skip(from)
            .limit(Number(per_page))
            .exec();
...