问题描述
我使用了如下所示的简单语句来访问loopback4中的标头。
console.log(request.headers);
但是它正在打印未定义。我要访问的示例请求标头位于图像中。 request header image
我收到了请求及其标头,这很好。只是由于我无法从request.headers中获得定义,所以我无法访问其标题。
我是回送的初学者,请解释一下。
如果我必须使用bodyparser,那么我将如何在loopback4中使用它,因为它与express不同。
解决方法
更新
原始答案虽然有效,但不建议这样做。改用依赖项注入:
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对象不同,这会剥离不必要的信息并提供内置的强制性。
进一步阅读
- https://loopback.io/doc/en/lb4/Decorators_openapi.html#parameter-decorator
- https://loopback.io/doc/en/lb4/apidocs.openapi-v3.param.html
原始答案
如果您尝试访问Controller中的标头,则可以注入REQUEST对象:
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'};
}
}
}
,
在sequence.ts
中,request
对象是通过context
调用的。
const {request,response} = context;
console.log(request.headers)
添加登录sequence.ts
以获得请求标头。