如何在 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 强制转换。
进一步阅读
- https://loopback.io/doc/en/lb4/Decorators_openapi.html#parameter-decorator
- https://loopback.io/doc/en/lb4/apidocs.openapi-v3.param.html
原回答
如果您试图在控制器中访问 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'};
}
}
}
我使用如下简单语句访问 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 强制转换。
进一步阅读
- https://loopback.io/doc/en/lb4/Decorators_openapi.html#parameter-decorator
- https://loopback.io/doc/en/lb4/apidocs.openapi-v3.param.html
原回答
如果您试图在控制器中访问 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'};
}
}
}