javascript - 区分 Controller 的 2 条路由(NestJS)

标签 javascript node.js nestjs

编辑:当我将 @Get('/random') 移到其他 2 条路线上方时,它正在工作...奇怪
我正在做一个 NestJS 服务器,它只获取 Breaking Bad API 的一些路由,并在服务器的路由中显示 JSON,
我想创建 3 条路线:

  • 1 返回节目所有字符的 JSON (/characters/all)
  • 1 返回节目单个字符的 JSON (/characters/:id)
  • 1 返回节目随机字符的 JSON (/character/random)

  • 两条第一条路线正在运行,但 最后一个收不到 ,
    我收到一个错误 500,上面写着错误:请求失败,状态代码为 500,目标网址是“https://www.breakbadapi.com/api/characters/random”,我不知道为什么它是“字符”和不是“字符”
    这是我的代码:
    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
    

    最佳答案

    在 Nest 服务器中定义的路由顺序非常重要。通过拥有 @Get(':id')之前 @Get('/random')您正在切断对 /random 的访问权限因为底层 HTTP 引擎会考虑字符串 "random"作为 id对于 ':id' .

    I don't know why it's 'characters' and not 'character'


    如上所述,random被拉入成为 id而不是路线本身。搬家@Get('/random')路线和处理程序到上面 @Get(':id')应该为你解决这个问题。

    关于javascript - 区分 Controller 的 2 条路由(NestJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64860307/

    相关文章:

    javascript - Youtube API 未在 Firefox 中加载

    javascript - react 等待服务器响应

    heroku - Heroku 上的 NestJS 总是无法绑定(bind)端口

    javascript - 如何使用 Nest.js 中的类验证器验证数组中每个对象的字段

    typescript - 输入 express & nestjs,启动项目错误

    javascript - 如何在imacros中获取全局javascript变量?

    javascript - 在 UIWebview 中显示网站中的特定 HTML/Javascript 元素

    windows - 如果运行 node.js 的 Azure 辅助角色终止,是否会重新启动 Node 进程?

    javascript - 如何在 JavaScript 中向具有多个异步调用的函数添加回调?

    node.js - 源更改时如何重建 node.js 插件