【发布时间】:2019-12-13 05:08:59
【问题描述】:
我有一个端点正在使用一个安静的 url service/getDocument/:documentId 我已经设置了一个带有验证的路径对象,并且当使用 documentId 调用端点时一切都很好。当我离开 documentId 时,我收到一个 404 错误,它没有给我来自 @IsNotEmpty 消息的消息。当我将端点转换为使用 @Query 时,我得到了我期待的消息。
服务
@Controller('service') // Define this class as a controller
export class Controller {
constructor() {}
// Gets all prescriptions with pagination
@Get('getDocument/:documentId')
async getDocument(
@Res() res: Response,
@Param() params: Path,
@Headers() headers: Headers
): Promise<any> {
...
这是我收到的消息
"message": "Cannot GET /service/getDocument/"
我的路径 dto
import { IsString, IsNotEmpty } from 'class-validator';
import { ApiModelProperty } from '@nestjs/swagger';
export class Path {
@IsString()
@IsNotEmpty({ message: 'documentId required in url as rest param <serviceURL>/<endpoint>/<documentId>' })
@ApiModelProperty({
required: true,
description: 'document reference id'
})
documentId: string;
}
当我将端点转换为使用 @Query 时,我得到了预期的响应。状态 422 和来自 dto 的这条消息
更新的控制器
@Get('getDocument')
async getDocument(
@Res() res: Response,
@Query() params: Path,
@Headers() headers: Headers
): Promise<any> {
回应
{
"errors": [
"documentId required in url as rest param <serviceURL>/<endpoint>/<documentId>",
"documentId must be a string"
]
}
【问题讨论】:
-
这可能只是一种类型,但在您的控制器中,您将 URL 路径定义为
/url/:documentId,但在您的错误中,端点位于service/getDocument/,如果不是,它将解释 404一个错字。 -
我更改了这些值只是为了在此处发布并错过了更改这两个地方。
标签: parameters controller nestjs class-validator