typescript - nest.js @Post sette innholdstypen for responsen


Jeg prøver å implementere et POST-endepunkt i API-en min, som returnerer en HTML-streng når det kalles.

Koden min ser slik ut for øyeblikket:

import { Controller, Post } from '@nestjs/common';
@Controller()
export class MyController {
    @Post('/endpoint')
    public create(): string {
        return `
            <!DOCTYPE html>
            …
            </html>`;
    }
}

Hvordan kan jeg få POST-endepunktet til å sende riktig innholdstype sammen med svaret sitt? Jeg har søkt gjennom all dokumentasjon, men klarte ikke å finne noe som var nyttig for meg.

Takk på forhånd for hjelpen din

Svar #1

Jeg klarte å finne svaret selv. Jeg la bare til @Header-dekoren rett bak @Post-dekoren:

import { Header } from '@nestjs/common'

@Post('/endpoint')
@Header('content-type', 'text/html')
public create(): string {
  //
}

Svar #2

Et annet alternativ (forutsatt at Express brukes), er å spesifisere innholdstype når du sender responsen. Dette vil la deg betinget returnere JSON (eller andre responstyper) mens du behandler forespørselen:

import { Response } from 'express';

@Post('/endpoint')
public create(@Res() res: Response): string {
    // ...
    if (error) {
        return res.status(404).json({message: 'image not found'});
    }
    // ...
    return res.status(200).contentType('text/html').send(document);
}

Relaterte artikler