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.
3 Réponses :
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.
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.
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); } }
Génial! Assurez-vous de la marquer comme réponse acceptée afin que les autres puissent la trouver plus facilement
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'}; } } }