javascript NestJS控制器未Map

nhn9ugyo  于 2022-12-10  发布在  Java
关注(0)|答案(7)|浏览(354)

因此,我有一个API,将部署在一个Docker容器中。这个API有authentications控制器,简单,没有什么特别的。
当我在我的本地机器上以开发模式启动API时,auth控制器将被找到,并且一切都运行正常。在我的本地机器上构建和运行它也是如此。但是当我将dockerize项目并在虚拟机上运行它时,我将无法访问auth控制器。每个其他控制器都在工作,但是auth控制器不存在。
查看Docker日志,将不会Map任何身份验证控制器。本地和构建的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"
}

什么原因会导致身份验证控制器无法Map?

dddzy1tm

dddzy1tm1#

如果你已经尝试了所有其他的方法,但是没有任何效果,那么试着删除dist文件夹。这对我来说很有效。

lmvvr0a8

lmvvr0a82#

您是否将控制器放入模块中?

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

i2byvkas3#

最后发现NestJS的一些软件包有版本6和版本7。所以它们可能会互相中断。一个指标是这样的警告洪水:

运行nest update -f后,每个控制器都按预期进行了Map。
编辑:
从NestJS版本9开始,更新命令已被删除。
请参阅此处:迁移指南- CLI

h4cxqtbf

h4cxqtbf4#

我遇到了与OP相同的问题,但这是因为我在将该端点添加到控制器后没有重新启动NestJS服务器。
此外,我习惯于在其他上下文中使用npm启动,在不重新启动的情况下自动更新服务器(React、React Native,我认为是节点?)。

smdncfj3

smdncfj35#

你有没有把它添加到你的应用模块中?

sxissh06

sxissh066#

我昨天部署的服务器上也遇到了这个问题,经过一天的研究,我使用的是master分支,我的代码一直推到dev分支,所以我希望有人也能检查一下。

r3i60tvu

r3i60tvu7#

您还可以确认是否在任何受影响的模块(通常是app.module.ts)中遗漏了@ for @Module()

相关问题