Mon client s'attend à ce que tous les codes d'état réussis soient égaux à 200. Cependant, NestJS utilise 201 par défaut pour toutes les méthodes POST. Comment désactiver 201 pour les applications POST à l'échelle de l'application? Pas pour une méthode mais pour toute l'application.
3 Réponses :
Vous pouvez utiliser le décorateur HttpCode ()
pour chaque article pour changer son code de retour.
L'autre option à laquelle je peux immédiatement penser serait d'utiliser un intercepteur et de modifier l'état de la réponse tant qu'elle parvient à l'intercepteur, dans la méthode pipe
de l'observable. p >
Pourquoi ignorez-vous la question? Il dit clairement "Pas pour une méthode mais pour l'ensemble de l'application".
Je n'ai pas ignoré la question. La seconde moitié de ma réponse vous indique exactement quoi faire dans le cas d'utiliser un intercepteur. Même dans Express, quel nid est construit, vous devez définir explicitement le statut à 200 au lieu de 201
Vous devez spécifier des codes d'état pour chaque contrôleur
Selon la documentation officielle https: // docs .nestjs.com / controllers # status-code
De plus, le code d'état de la réponse est toujours 200 par défaut, sauf pour les requêtes POST qui utilisent 201. Nous pouvons facilement changer cela comportement en ajoutant le décorateur @HttpCode (...) au niveau du gestionnaire ( voir les codes d'état ).
@Post() @HttpCode(200) create() { return 'This action adds data'; }
Nestjs a également un autre moyen qui dépend de la bibliothèque (express / fastify):
Nous pouvons utiliser l'objet de réponse spécifique à la bibliothèque (par exemple, Express), qui peut être injecté à l'aide du décorateur @Res () dans le gestionnaire de méthode signature (par exemple, findAll (réponse @Res ())). Avec cette approche, vous avoir la capacité (et la responsabilité), d'utiliser la réponse native méthodes de gestion exposées par cet objet. Par exemple, avec Express, vous pouvez construire des réponses en utilisant un code comme response.status (200) .send ()
Mais si c'est possible, je recommande d'utiliser Reponse.ok pour indétifier le succès Réponse côté client
Je sais déjà comment faire cela pour chaque méthode. J'ai demandé une solution globale. C'était articulé dans la question.
Vous n'avez aucun problème dans la partie backend. il s'agit du côté client, alors j'ai écrit à ce sujet. Si vous voulez écrire un mauvais code, bienvenue
Créez un intercepteur. Mais qu'est-ce qu'il y a de si mauvais à propos de 201?
@Injectable() export class PostInterceptor implements NestInterceptor { intercept(context: ExecutionContext, next: CallHandler): Observable<any> { const request = context.switchToHttp().getRequest<Request>(); const response = context.switchToHttp().getResponse<Response>(); if (request.method === 'post') response.status = HttpStatus.OK; // Probably have to do something a bit more complex than this but this is the general gist } }
En réalité, j'allais bien avec 201. Mais je crains que mon client ne le comprenne pas. Je voulais donc m'assurer de pouvoir le désactiver s'il ne fonctionnait pas. Le client n'a pas encore été écrit et je ne sais pas à quoi m'attendre de leurs développeurs. Cela semble risqué.
J'ai l'habitude de dire aux gars du front-end "Vous obtenez ce qu'on vous donne" X'D ils veulent toujours "Toutes les choses" et ne veulent jamais implémenter la pagination. Ce à quoi je dis "J'ai implémenté la pagination pour une raison. Utilisez-la"
response.status est en lecture seule. il ne peut pas être changé.