0
votes

Comment accéder aux en-têtes de requête dans loopback4?

J'ai utilisé une instruction simple comme ci-dessous pour accéder aux en-têtes de loopback4.

console.log(request.headers);

Mais il imprime undefined. Un exemple d'en-têtes de demande auquel je souhaite accéder se trouve dans l'image. image d'en-tête de la demande

Je reçois la demande et ses en-têtes ce qui est parfaitement bien. C'est juste que je ne suis pas en mesure d'accéder à ses en-têtes car je suis indéfini à partir de request.headers.

Je suis un débutant en loopback alors veuillez l'expliquer.

Si je dois utiliser un bodyparser puis comment je devrais l'utiliser dans loopback4 car il est différent d'express.


0 commentaires

3 Réponses :


-1
votes

Dans sequence.ts , l'objet request est appelé via context.

  const {request, response} = context;
  console.log(request.headers)

add log in sequence.ts pour obtenir les en-têtes de la requête.


0 commentaires

1
votes

Mise à jour

La réponse d'origine, bien que valide, n'est pas la méthode recommandée. Utilisez plutôt l'injection de dépendances:

import {inject} from '@loopback/core';
import {get, Request, RestBindings} from '@loopback/rest';

export class SomethingController {
  constructor(@inject(RestBindings.Http.REQUEST) private req: Request) {}

  @get('/something')
  something(): void {
    // Get the headers
    this.req.headers;
  }
}

Contrairement à l'objet REQUEST, cela supprime les informations inutiles et fournit une coercition intégrée.

Lectures complémentaires


Réponse d'origine

Si vous essayez d'accéder aux en-têtes d'un Controller, vous pouvez alors injecter l'objet REQUEST:

import {inject} from '@loopback/core';
import {get, param} from '@loopback/rest';

export class SomethingController {
  constructor() {}

  @get('/something')
  something(@param.header.string('x-your-header') yourHeader: string): void {
    // Use your header.
    // e.g. Log to console
    console.log(yourHeader);
  }
}

1 commentaires

Génial! Assurez-vous de la marquer comme réponse acceptée afin que les autres puissent la trouver plus facilement



0
votes

Vous pouvez également utiliser le contexte, exemple

import {inject} from '@loopback/core';
import {
  post, RequestContext
} from '@loopback/rest';

export class UserController {
  constructor(
    @inject.context() 
    public context: RequestContext,
  ) {}

    @post('/users/logout', {
    responses: {
      '200': {
        description: 'Return success',
        content: {
          'application/json': {
            schema: {
              type: 'object'               
            },
          },
        },
      },
    },
  })
     async logout(): Promise<object> {
    // ensure the token exists
    const authHeader = this.context.request.headers.authorization;
    if(authHeader && authHeader.split(" ")[1]){
      //    remove token
      return {code:204, status: true, message:'Logout successful'};
    }else{
      return {code: 404, status: false, message:'Something went wrong'};
    }    
  }
}


0 commentaires