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'};
}
}
}