在 loopback4 中添加 Request body Schema
Add Request body Schema in loopback4
我是 loopback 4 的新手,我真的很难理解一段时间未更新的文档。我成功地添加了一个身份验证系统和一个登录用户的路由。我的问题出在“/explorer”URL,我不知道如何在自定义路由的请求正文架构中添加示例值。
这是我的路线:
@post('/users/login', {
responses: {
'200': {
description: 'Token',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
token: {
type: 'string'
}
}
}
}
}
}
}
})
async login(
@requestBody() credentials: Credentials,
): Promise<{token: string}> {
// make sure user exist,password should be valid
const user = await this.userService.verifyCredentials(credentials);
// console.log(user);
const userProfile = await this.userService.convertToUserProfile(user);
// console.log(userProfile);
const token = await this.jwtService.generateToken(userProfile);
return Promise.resolve({token: token})
}
我想补充:
{
"username": "string",
"password": "string"
}
这里:
我想有一个简单的方法可以做到这一点,但我真的找不到任何相关信息。
仅供参考:loopback4 使用路由装饰器,它提供 OpenAPI 规范来描述端点。关于OpenAPI decorator in loopbac4 here.
有详细介绍
现在解决上面的问题。让我们创建:
用户登录模式即 {"username":string, "password":string}
在架构定义中,您还可以添加验证规则。
const UserLoginSchema = {
type: 'object',
required: ['email', 'password'],
properties: {
username: {
type: 'string',
},
password: {
type: 'string',
},
},
}; ```
现在让我们快速创建用于登录的 RequestBody c'tor。请记住,根据 OpenApi 规范,请求正文将包含描述、要求和内容。
export const UserLoginRequestBody = {
description: 'Required input for login',
required: true,
content: {
'application/json': {schema: UserLoginSchema},
},
};
- 现在您可以使用您的请求正文了。
async login(
@requestBody(UserLoginRequestBody) credentials: Credentials,
): Promise<{token: string}> {
..restCode
到此为止。
谢谢@Madaky。阅读您的回答后,我只是直接在我的路线中直接添加了 differents 对象,以不制作额外的文件(我不知道这是否是一个好习惯)但它有效。
在“@requestBody”函数中添加了信息的最终代码:
@post('/users/login', {
responses: {
'200': {
description: 'Token',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
token: {
type: 'string'
}
}
}
}
}
}
}
})
async login(
//here above inside @requestBody
@requestBody(
{
description: 'Required input for login',
required: true,
content: {
'application/json': {
schema: {
type: 'object',
required: ['email', 'password'],
properties: {
username: {
type: 'string',
},
password: {
type: 'string',
},
},
},
}
},
}
) credentials: Credentials,
): Promise<{token: string}> {
// make sure user exist,password should be valid
const user = await this.userService.verifyCredentials(credentials);
// console.log(user);
const userProfile = await this.userService.convertToUserProfile(user);
// console.log(userProfile);
const token = await this.jwtService.generateToken(userProfile);
return Promise.resolve({token: token})
}
效果很好,谢谢!
我是 loopback 4 的新手,我真的很难理解一段时间未更新的文档。我成功地添加了一个身份验证系统和一个登录用户的路由。我的问题出在“/explorer”URL,我不知道如何在自定义路由的请求正文架构中添加示例值。
这是我的路线:
@post('/users/login', {
responses: {
'200': {
description: 'Token',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
token: {
type: 'string'
}
}
}
}
}
}
}
})
async login(
@requestBody() credentials: Credentials,
): Promise<{token: string}> {
// make sure user exist,password should be valid
const user = await this.userService.verifyCredentials(credentials);
// console.log(user);
const userProfile = await this.userService.convertToUserProfile(user);
// console.log(userProfile);
const token = await this.jwtService.generateToken(userProfile);
return Promise.resolve({token: token})
}
我想补充:
{
"username": "string",
"password": "string"
}
这里:
我想有一个简单的方法可以做到这一点,但我真的找不到任何相关信息。
仅供参考:loopback4 使用路由装饰器,它提供 OpenAPI 规范来描述端点。关于OpenAPI decorator in loopbac4 here.
有详细介绍
现在解决上面的问题。让我们创建:
用户登录模式即 {"username":string, "password":string} 在架构定义中,您还可以添加验证规则。
const UserLoginSchema = { type: 'object', required: ['email', 'password'], properties: { username: { type: 'string', }, password: { type: 'string', }, }, }; ```
现在让我们快速创建用于登录的 RequestBody c'tor。请记住,根据 OpenApi 规范,请求正文将包含描述、要求和内容。
export const UserLoginRequestBody = {
description: 'Required input for login',
required: true,
content: {
'application/json': {schema: UserLoginSchema},
},
};
- 现在您可以使用您的请求正文了。
async login(
@requestBody(UserLoginRequestBody) credentials: Credentials,
): Promise<{token: string}> {
..restCode
到此为止。
谢谢@Madaky。阅读您的回答后,我只是直接在我的路线中直接添加了 differents 对象,以不制作额外的文件(我不知道这是否是一个好习惯)但它有效。
在“@requestBody”函数中添加了信息的最终代码:
@post('/users/login', {
responses: {
'200': {
description: 'Token',
content: {
'application/json': {
schema: {
type: 'object',
properties: {
token: {
type: 'string'
}
}
}
}
}
}
}
})
async login(
//here above inside @requestBody
@requestBody(
{
description: 'Required input for login',
required: true,
content: {
'application/json': {
schema: {
type: 'object',
required: ['email', 'password'],
properties: {
username: {
type: 'string',
},
password: {
type: 'string',
},
},
},
}
},
}
) credentials: Credentials,
): Promise<{token: string}> {
// make sure user exist,password should be valid
const user = await this.userService.verifyCredentials(credentials);
// console.log(user);
const userProfile = await this.userService.convertToUserProfile(user);
// console.log(userProfile);
const token = await this.jwtService.generateToken(userProfile);
return Promise.resolve({token: token})
}
效果很好,谢谢!