如何在 loopback4 中访问请求 headers?

How to access request headers in loopback4?

我使用如下简单语句访问 loopback4 中的 headers。

console.log(request.headers);

但它正在打印未定义。我想要访问的示例请求 headers 在图像中。 request header image

我收到了请求及其 headers 非常好。只是我无法访问它的 headers 因为我从 request.headers.

得到未定义

我是loopback的初学者,所以请解释一下。

如果我必须使用 bodyparser 那么我将如何在 loopback4 中使用它,因为它与 express 不同。

sequence.ts 中,request 对象通过 context 调用。

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

添加登录sequence.ts获取请求头。

更新

原答案虽然有效,但不是推荐的方法。改用依赖注入:

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

与 REQUEST object 不同,这会去除不必要的信息并提供 built-in 强制转换。

进一步阅读


原回答

如果您试图在控制器中访问 headers,那么您可以注入 REQUEST object:

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

你也可以使用上下文,例子

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