首页 > 解决方案 > 区分控制器的 2 条路由(NestJS)

问题描述

编辑:当我将 @Get('/random') 移动到其他 2 条路线上方时,它正在工作......奇怪

我正在做一个 NestJS 服务器,它只获取 Breaking Bad API 的一些路由,并在服务器的路由中显示 JSON,

我想创建 3 条路线:

2 条第一条路线正在运行,但我无法获得最后一条我收到一条错误 500,上面写着 Error: Request failed with status code 500 并且目标网址是 'https://www.breakbadapi.com/api/字符/随机',我不知道为什么它是'字符'而不是'字符'

这是我的代码:

characters.controller.ts

import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { CharactersService } from './characters.service';

@Controller('characters')
export class CharactersController {
    constructor(private readonly charactersService: CharactersService) {}

    @Get('/all')
    getAll() {
        return this.charactersService.getAll();
    }

    @Get(':id')
    getOne(@Param('id') id: string) {
        return this.charactersService.getOne(id);
    }

    @Get('/random')
    getRandom() {
        return this.charactersService.getRandom();
    }
}

characters.service.ts

import axios from "axios";

import { Injectable } from '@nestjs/common';

@Injectable()
export class CharactersService {
    getAll() {
      return axios.get(`${process.env.ENDPOINT_BASE_URL}/characters`, {
        params: {
          limit: null,
          offset: null,
          name: ""
        }
      }).then(function (response) {
          return response.data;
        })
        .catch(function (error) {
          console.log(error);
        });
    }

    getOne(id: string) {
      return axios.get(`${process.env.ENDPOINT_BASE_URL}/characters/${id}`).then(function (response) {
        return response.data;
      })
      .catch(function (error) {
        console.log(error);
      });
    }

    getRandom() {
      return axios.get(`${process.env.ENDPOINT_BASE_URL}/character/random`).then(function (response) {
        return response.data;
      })
      .catch(function (error) {
        console.log(error);
      });
    }
}

.env

ENDPOINT_BASE_URL=https://www.breakingbadapi.com/api

标签: javascriptnode.jsnestjs

解决方案


在 Nest 服务器中定义的路由顺序非常重要。通过@Get(':id')@Get('/random')您切断访问之前,/random因为底层 HTTP 引擎会将字符串"random"视为idfor ':id'

我不知道为什么它是“字符”而不是“字符”

如上所述,random被拉入的是一条id而不是一条路线本身。将@Get('/random')路线和处理程序移到上面@Get(':id')应该可以为您解决这个问题。


推荐阅读