繁体   English   中英

为什么我不能在 NestJS 中映射更多 api?

[英]Why can't I mapped more api in NestJS?

添加 http://localhost:8080/api/v1/admin (GET) 以使用 NestJS 开发 api,我们添加了 Get 注释并继续开发 api,但未映射 api,如果调用 api,将发生 404notfound 错误。 什么样的问题?

// admin.controller.ts

import { Body, Controller, Get, HttpCode, Post, UseGuards } from '@nestjs/common';
import {
    ApiTags,
    ApiOperation,
    ApiResponse,
  } from '@nestjs/swagger';
import { ReqAdmin } from 'src/lib/decorator/req-admin.decorator';
import { HttpAuthGuard } from 'src/guards/auth/http-auth.guard';
import { BaseResponse } from 'src/models/http/base.response';
import { AdminService } from './admin.service';
import { CreateAdminDto } from './dto/create.admin.dto';
import { LoginAdminDto } from './dto/login.admin.dto';
import { Admin } from 'src/entities/admin.entity';

@Controller('admin')
@ApiTags('관리자 API')
export class AdminController {
constructor(
    private readonly adminService: AdminService
) {}

@Get('/')
@UseGuards(HttpAuthGuard)
@ApiOperation({ summary: '내 정보 보기', description: '내정보 보기' })
@ApiResponse({ status: 200, description: '내 정보 조회 성공' })
public async findOne(@ReqAdmin() admin: Admin): Promise<BaseResponse> {
    const data = await this.adminService.findOneById(admin.id);
    return BaseResponse.object('내정보 조회 성공', { 
        data,
    })
}

@Post('/')
@ApiOperation({ summary: '관리자 생성 API', description: '관리자를 생성한다.' })
@ApiResponse({ status: 201, description: '관리자 생성성공' })
public async create(@Body() createAdminDto: CreateAdminDto) {
    await this.adminService.create(createAdminDto);
    return BaseResponse.object('관리자 생성성공')
}

@Post('/login')
@HttpCode(200)
@ApiOperation({ summary: '관리자 로그인 API', description: '관리자 로그인' })
@ApiResponse({ status: 200, description: '관리자 로그인성공', type: String })
public async login(@Body() loginAdminDto: LoginAdminDto) {
    const token = await this.adminService.login(loginAdminDto);
    return BaseResponse.object('관리자 로그인성공', { 
        'x-access-token': token 
    })
  }
}

// admin.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Admin } from 'src/entities/admin.entity';
import { TokenModule } from 'src/token/token.module'; 
import { TokenService } from 'src/token/token.service';
import { AdminController } from './admin.controller';
import { AdminRepository } from './admin.repository';
import { AdminService } from './admin.service';

@Module({
  imports: [
     TypeOrmModule.forFeature([
       Admin
     ])
  ],
  providers: [AdminService, TokenService],
  exports: [AdminService],
  controllers: [AdminController]
})
export class AdminModule {}

// 终端

iwonje@iwonje-ui-MacBookAir mcn-admin-backend % nest start
[Nest] 40115  - 2022. 10. 11. 오후 4:12:15     LOG [NestFactory] Starting Nest 
application...
[Nest] 40115  - 2022. 10. 11. 오후 4:12:15     LOG [InstanceLoader] AppModule 
dependencies initialized +42ms
[Nest] 40115  - 2022. 10. 11. 오후 4:12:15     LOG [InstanceLoader] TypeOrmModule 
dependencies initialized +0ms
[Nest] 40115  - 2022. 10. 11. 오후 4:12:15     LOG [InstanceLoader] TypeOrmCoreModule 
dependencies initialized +303ms
[Nest] 40115  - 2022. 10. 11. 오후 4:12:15     LOG [InstanceLoader] TypeOrmModule 
dependencies initialized +0ms
[Nest] 40115  - 2022. 10. 11. 오후 4:12:15     LOG [InstanceLoader] AdminModule 
dependencies initialized +1ms
[Nest] 40115  - 2022. 10. 11. 오후 4:12:15     LOG [RoutesResolver] AdminController 
{/api/v1/admin}: +287ms
[Nest] 40115  - 2022. 10. 11. 오후 4:12:15     LOG [RouterExplorer] Mapped 
{/api/v1/admin, POST} route +1ms
[Nest] 40115  - 2022. 10. 11. 오후 4:12:15     LOG [RouterExplorer] Mapped 
{/api/v1/admin/login, POST} route +1ms
[Nest] 40115  - 2022. 10. 11. 오후 4:12:15     LOG [NestApplication] Nest application 
successfully started +1ms

// 应用程序.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm';
import { DatabaseTypes } from '../database/database.enum';
import { DatabaseFactory } from '../database/database.factory';
import { AdminModule } from 'src/admin/admin.module';

@Module({
 imports: [
   TypeOrmModule.forRoot(
     DatabaseFactory.createDatabase(DatabaseTypes.MYSQL).options(),
   ),
   AdminModule
 ],
})
export class AppModule {}

看起来你已经为你的 api /api/v1添加了前缀

您可以尝试调用http://localhost:8080/api/v1/admin而不是http://localhost:8080/admin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM