端点冲突

Endpoint conflict

每当我执行以下端点时,我都会收到 ID 类型错误。

Request GET /lists/45 failed with status code 500. error: invalid input syntax for type uuid: "45"

有问题的端点:

//  @get('/blabla/{color}', {   //---> Works!
  @get('/lists/{color}', {   //---> Error!
    responses: {
      '200': {
        description: 'Query all lists by color',
      },
    },
  })
  async getListByColor(@param.path.string('color') color: number): Promise<number> {
    return this.listsRepository.dataSource.execute("SELECT * FROM public.lists as li WHERE li.color = " + color);
  }

另一个端点工作正常:

  @get('/lists/{id}', {
    responses: {
      '200': {
        description: 'Lists model instance',
        content: {
          'application/json': {
            schema: getModelSchemaRef(Lists, {includeRelations: true}),
          },
        },
      },
    },
  })
  async findById(
    @param.path.string('id') id: string,
    @param.filter(Lists, {exclude: 'where'}) filter?: FilterExcludingWhere<Lists>
  ): Promise<Lists> {
    return this.listsRepository.findById(id, filter);
  }

REST 路由器无法区分 /lists/{color}/lists/{id} 这两个端点,因为这两个路径都将解析为 /lists/{an arbitrary string}。 因此,路由器可能会将流量路由到需要 UUID 数据类型 ID 的错误端点。因此,数据库引擎级错误。

另请注意,第一个示例容易受到 SQL 注入攻击。请考虑改用 Parameterized SQL