Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 在这个端点中,我的NestJS控制器和TypeORM发生了什么?_Typescript_Nestjs_Typeorm - Fatal编程技术网

Typescript 在这个端点中,我的NestJS控制器和TypeORM发生了什么?

Typescript 在这个端点中,我的NestJS控制器和TypeORM发生了什么?,typescript,nestjs,typeorm,Typescript,Nestjs,Typeorm,我遇到了一个非常奇怪的错误,我真的不知道为什么会发生 我正在尝试查询所有博客帖子状态(只有三种——草稿、已发布和已存档)以发送回我的前端。在我的控制器中,我将路线定义为: @Controller('blog/posts/statuses') export class BlogPostStatusController { constructor( private readonly blogPostStatusService: BlogPostStatusService

我遇到了一个非常奇怪的错误,我真的不知道为什么会发生

我正在尝试查询所有博客帖子状态(只有三种——草稿、已发布和已存档)以发送回我的前端。在我的控制器中,我将路线定义为:

@Controller('blog/posts/statuses')
export class BlogPostStatusController {
    constructor(
        private readonly blogPostStatusService: BlogPostStatusService
    ) { }

    @Get('')
    @HttpCode(200)
    @UseGuards(JwtAuthGuard)
    async getPostStatuses(@Req() request: Request): Promise<BlogPostStatus[]> {
        const statuses = await this.blogPostStatusService.getStatuses();
        if(statuses.length === 0) throw new BlogPostStatusesWereNotFoundException();

        return statuses;
    }
}
当向端点发出请求(
api/blog/posts/statuses
)时,它会抛出一个500错误,因为PostgreSQL正在接收类型integer的
无效输入语法:“statuses”

引发异常:QueryFailedError:类型integer的输入语法无效:“状态” 在新的QueryFailedError(C:\dev\repos\web\mattmaxwell\api\node\u modules\typeform\error\QueryFailedError.js:11:28) 在Query.callback(C:\dev\repos\web\mattmaxwell\api\node\u modules\typeorm\driver\postgres\postgreskeryrunner.js:176:38) 位于Query.handleError(C:\dev\repos\web\mattmaxwell\api\node\u modules\pg\lib\Query.js:139:19) 在客户端。\u handleErrorMessage(C:\dev\repos\web\mattmaxwell\api\node\u modules\pg\lib\Client.js:326:17) 在Connection.emit(events.js:315:20) 在C:\dev\repos\web\mattmaxwell\api\node\u modules\pg\lib\connection.js:109:12 在Parser.parse(C:\dev\repos\web\mattmaxwell\api\node\u modules\pg protocol\dist\Parser.js:40:17) 在插座上。(C:\dev\repos\web\mattmaxwell\api\node\u modules\pg protocol\dist\index.js:8:42) 在Socket.emit(events.js:315:20) 在addChunk(_stream_readable.js:295:12){ 长度:173, 严重性:“错误”, 代码:“22P02”, 细节:未定义, 提示:未定义, 位置:未定义, 内部位置:未定义, internalQuery:未定义, 其中:未定义, 模式:未定义, 表:未定义, 列:未定义, 数据类型:未定义, 约束:未定义, 文件:“d:\\pginstaller\u 12.auto\\postgres.windows-x64\\src\\backend\\utils\\adt\\numultils.c”, 行:“259”, 例行程序:“pg_strotInt32”, 查询:'选择“bp”,“id”作为“bp\U id”,“bp”,“title”作为“bp\U title”,“bp”,“preview”作为“bp\U preview”,“bp”,“content”作为“bp\U content”,“bp”,“image\u url”作为“bp\U image\u url”,“bp”,“created\u at”作为“bp\u created\u at”,“bp”,“updated\u at”作为“bp\u update” ed_at“,”bp“,”author_id“为”bp_author_id“,”bp“,”status_id“为”bp_status_id“,”ba“,”id“为”ba_id“,”ba“,”first_name“为”ba_first_name“,”last_name“为”ba_last_name“,”bps“,”id“为”bps_id“,”bps“,”status“为”bps_status“,”bt” “id”为“bt_id”,“bt”。“name”为“bt_name”,“bt”。“description”为“bt_description”,“bt”。“created_at”为“bt_created_at”,“bt”。“updated_at”为“bt_updated_at”为“bt_updated_at”,从“blog_post”“bp”左键加入“blog_author”“ba”。“id”=“bp”。“autho” r_id“LEFT JOIN”blog_post_status“bps”ON“bps”。“id”=“bp”。“status_id”LEFT JOIN“blog_post_主题”blog_主题“bp”ON“bp”;“blog_post_id”=“bp”。“id”LEFT JOIN“blog_主题”ON“bt”;“id”=“bp”;“blog_主题”id“bp”在“bp”的位置 id“=$1”, 参数:[“状态”] } 正如您所看到的,无论如何查询的表都是错误的。我不知道为什么我的端点会被读取到查询中,但我注意到如果我将decorator更改为
@Get('statuses')
,那么查询就成功了(新端点变成
api/blog/posts/statuses/statuses
)。不幸的是,这不是我想要的API端点,但出于某种原因,它可以工作,而另一个不能。到目前为止,数据被硬编码到我的前端,它工作得很好,特别是考虑到只有三个可能的记录,但这是一个我不喜欢的黑客解决方案

我可以肯定的是,在decorator中有一个空字符串不是问题。就在这之前,我在控制器中为我的帖子编写了这段代码(decorator是
@Get('statuses')
导致了
api/blog/posts/statuses
)的相同端点),但这也引发了完全相同的错误。我知道我正在尝试做的是可能的,因为我有另一个实体具有不同的状态(活动和非活动),查询具有相同控制器/端点设置的实体就可以了。这似乎没有理由发生,这就是为什么我如此困惑的原因。任何帮助都将不胜感激


注意:即使将状态控制器更改为
@controller('blog/statuses')
也有效,因此我认为这是端点本身的问题,但是。。。为什么?这似乎是合理的期望,但如果我遗漏了一些东西,我将非常感谢任何人分享一些知识。

解决方案:我不知道为什么我没有早些尝试,但在我的BlogModule导入中,将我的BlogPostStatusController放在我的BlogPostController之前可以让它工作。有人知道为什么会这样吗?这仍然不能解释为什么当我没有把它作为一个单独的控制器/服务时它就不起作用了(尽管路由是在控制器的最末端定义的),但是。。。至少它现在可以工作了。

根据您的回答,您可能有一个控制器路径,其中包含类似于
blog/posts/:parameter的内容。当您有此功能时,无论您是否有命名路由,如果先注册,它将首先被匹配,并且此处理程序将生效,这可能就是为什么使用
status
参数进行查询,试图匹配Id,这显然永远不会发生。

请在回答中继续回答。不要问他们的问题。请访问和,了解有关堆栈溢出的答案是如何工作的。
@Injectable()
export class BlogPostStatusService {
    constructor(
        @InjectRepository(BlogPostStatus)
        private readonly blogPostStatusRepository: Repository<BlogPostStatus>
    ) { }

    public async getStatuses(): Promise<BlogPostStatus[]> {
        return await this.blogPostStatusRepository
            .createQueryBuilder('bps')
            .getMany();
    }
}
Exception thrown:  QueryFailedError: invalid input syntax for type integer: "statuses"
    at new QueryFailedError (C:\dev\repos\web\mattmaxwell\api\node_modules\typeorm\error\QueryFailedError.js:11:28)
    at Query.callback (C:\dev\repos\web\mattmaxwell\api\node_modules\typeorm\driver\postgres\PostgresQueryRunner.js:176:38)
    at Query.handleError (C:\dev\repos\web\mattmaxwell\api\node_modules\pg\lib\query.js:139:19)
    at Client._handleErrorMessage (C:\dev\repos\web\mattmaxwell\api\node_modules\pg\lib\client.js:326:17)
    at Connection.emit (events.js:315:20)
    at C:\dev\repos\web\mattmaxwell\api\node_modules\pg\lib\connection.js:109:12
    at Parser.parse (C:\dev\repos\web\mattmaxwell\api\node_modules\pg-protocol\dist\parser.js:40:17)
    at Socket.<anonymous> (C:\dev\repos\web\mattmaxwell\api\node_modules\pg-protocol\dist\index.js:8:42)
    at Socket.emit (events.js:315:20)
    at addChunk (_stream_readable.js:295:12) {
  length: 173,
  severity: 'ERROR',
  code: '22P02',
  detail: undefined,
  hint: undefined,
  position: undefined,
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  schema: undefined,
  table: undefined,
  column: undefined,
  dataType: undefined,
  constraint: undefined,
  file: 'd:\\pginstaller_12.auto\\postgres.windows-x64\\src\\backend\\utils\\adt\\numutils.c',
  line: '259',
  routine: 'pg_strtoint32',
  query: 'SELECT "bp"."id" AS "bp_id", "bp"."title" AS "bp_title", "bp"."preview" AS "bp_preview", "bp"."content" AS "bp_content", "bp"."image_url" AS "bp_image_url", "bp"."created_at" AS "bp_created_at", "bp"."updated_at" AS "bp_updat
ed_at", "bp"."author_id" AS "bp_author_id", "bp"."status_id" AS "bp_status_id", "ba"."id" AS "ba_id", "ba"."first_name" AS "ba_first_name", "ba"."last_name" AS "ba_last_name", "bps"."id" AS "bps_id", "bps"."status" AS "bps_status", "bt
"."id" AS "bt_id", "bt"."name" AS "bt_name", "bt"."description" AS "bt_description", "bt"."created_at" AS "bt_created_at", "bt"."updated_at" AS "bt_updated_at" FROM "blog_post" "bp" LEFT JOIN "blog_author" "ba" ON "ba"."id"="bp"."autho
r_id"  LEFT JOIN "blog_post_status" "bps" ON "bps"."id"="bp"."status_id"  LEFT JOIN "blog_post_topics_blog_topic" "bp_bt" ON "bp_bt"."blog_post_id"="bp"."id" LEFT JOIN "blog_topic" "bt" ON "bt"."id"="bp_bt"."blog_topic_id" WHERE "bp"."
id" = $1',
  parameters: [ 'statuses' ]
}