【问题标题】:NestJS controller not mappedNestJS 控制器未映射
【发布时间】:2020-10-08 12:59:23
【问题描述】:

所以我有一个将部署在 docker 容器中的 API。这个 API 有 authentications 控制器,简单而不特别。

当我在本地机器上以开发模式启动 API 时,将找到身份验证控制器并且一切正常。在我的本地机器上构建和运行它也是如此。但是当我将项目 dockerize 并在虚拟机上运行它时,我将无法访问身份验证控制器。其他所有控制器都在工作 finde,但身份验证控制器不存在。

查看 docker 日志,不会映射任何身份验证控制器。本地和构建的 docker 镜像都应该包含相同的项目文件。

身份验证控制器:

import {
  Controller,
  Post,
  Delete,
  UseGuards,
  Request,
  Body,
} from '@nestjs/common';

import { AuthenticationsService } from './authentications.service';
import { JwtAuthGuard } from '../shared/guards/jwtAuth.guard';
import { SignInDTO } from './dtos/addGraphNodeToGraphByGraphId.dto';

@Controller('authentications')
export class AuthenticationsController {
  constructor(
    private readonly authenticationsService: AuthenticationsService,
  ) {}

  @Post()
  public signIn(@Body() { username, password }: SignInDTO): Promise<string> {
    return this.authenticationsService.signIn(username, password);
  }

  @Delete()
  @UseGuards(JwtAuthGuard)
  public signOut(@Request() request): Promise<void> {
    return this.authenticationsService.signOut(
      request.encodedToken,
      request.user.tokenExpirationSinceEpochInMilliseconds,
    );
  }
}

错误:

{
    "statusCode": 404,
    "message": "Not Found",
    "error": "Cannot POST /authentications"
}

什么可能导致无法映射身份验证控制器?

【问题讨论】:

  • 如果你修改一个现有的控制器,它是否会重新执行 docker 容器中的修改?
  • 将需要此控制器的模块代码放入问题中。也许这里有什么东西。另外,您在本地和 docker 中有哪些操作系统?

标签: javascript docker nestjs typeorm


【解决方案1】:

你把控制器放在模块里了吗?

@Module({
  controllers: [AuthenticationController],
})
export class AppModule {}

【讨论】:

  • 是的,我想如果我不这样做,它也不会在我的本地机器上工作
【解决方案2】:

最后发现 NestJS 的一些包有版本 6 和 7。所以他们适当地互相打断了。一个指标是大量的警告:

在运行nest update -f 之后,每个控制器都按预期映射。

【讨论】:

    【解决方案3】:

    您是否将其添加到您的应用程序模块中?认证模块。

    【讨论】:

      【解决方案4】:

      我遇到了与 OP 相同的问题,但这是因为在我将该端点添加到控制器后,我没有重新启动我的 NestJS 服务器。

      另外,我习惯于在其他情况下 npm start 自动更新服务器而无需重新启动(React,React Native,我认为是节点?)。

      【讨论】:

        【解决方案5】:

        如果您已经尝试了其他所有方法但没有任何效果,请尝试删除 dist 文件夹。这对我有用。

        【讨论】:

        • 我已经找到了解决方案:stackoverflow.com/a/62591471/8408576
        • 所选答案对我不起作用,所以我分享了我的答案,以防其他人面临同样的问题。
        • 谢谢,这是为我做的。
        • 我的构建没有编译,所以 intellij 只是使用最后一个工作版本:facepalm:谢谢!
        猜你喜欢
        • 2019-09-24
        • 2020-03-19
        • 1970-01-01
        • 1970-01-01
        • 2020-01-16
        • 1970-01-01
        • 2015-12-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多