You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS开发Ninja API时,GET按ID请求出现内部服务器错误

问题分析与修复方案

核心错误原因

你的API触发内部服务器错误,根源是NinjasService中的两个方法存在回调函数未返回判断结果的问题:

1. getNinja方法的Array.find回调无返回值

getNinja里的find回调没有返回ninja.id === id的判断逻辑,导致find始终返回undefined,进而触发throw new Error('ninja not found')。普通Error会被Nest识别为500内部服务器错误。

2. removeNinja方法的Array.filter回调无返回值

removeNinja中的filter回调同样未返回判断结果,导致过滤逻辑失效,无法正确删除指定ID的忍者。

修复后的完整代码

NinjasService 修复版

import { Injectable, NotFoundException } from '@nestjs/common';
import { CreateNinjaDto } from './dto/create-ninja.dto';
import { UpdateNinjaDto } from './dto/update-ninja.dto';

@Injectable()
export class NinjasService {
    private ninjas= [
        {id:0, name:'NinjaA', weapons: 'blades'},
        {id:1, name:'NinjaB', weapons:'nunchunks'},
    ];

    getNinjas(weapons?: 'blades'|'nunchunks')
    {
        if(weapons){
            return this.ninjas.filter((ninja)=> ninja.weapons === weapons);
        }
        return this.ninjas;
    }

    getNinja(id:number)
    {
        // 修复:给find回调添加返回值
        const ninja=this.ninjas.find((ninja)=>{
            return ninja.id === id;
        });
        // 优化:用Nest内置的NotFoundException返回标准404错误,而非普通Error
        if(!ninja){
            throw new NotFoundException('ninja not found');
        }
        return ninja;
    }

    createNinja(createNinjaDto : CreateNinjaDto)
    {
        const newNinja = {
            ...createNinjaDto,
            id: Date.now(),
        };
        this.ninjas.push(newNinja);
        return newNinja;
    }

    updateNinja(id:number, updateNinjaDto: UpdateNinjaDto)
    {
        this.ninjas = this.ninjas.map((ninja)=>{
            if(ninja.id===id)
                {
                    return {...ninja , ...updateNinjaDto};
                }
                return ninja;
        });
         return this.getNinja(id);
    }

    removeNinja(id:number){
        const ninjaRemove=this.getNinja(id);
        // 修复:给filter回调添加返回值
        this.ninjas= this.ninjas.filter((ninja)=>{
            return ninja.id !== id;
        })
        return ninjaRemove;
    }
}

额外优化建议

  • 替换普通Error为Nest内置的NotFoundException,可以返回标准的404 HTTP状态码,更符合REST API规范。
  • 可以在Controller层使用ParseIntPipe自动处理ID参数的类型转换与验证,省去手动转换的麻烦:
// 先从@nestjs/common导入ParseIntPipe
@Get(':id')
getOneNinja(@Param('id', ParseIntPipe) id: number){
   return this.ninjasService.getNinja(id);
}

内容的提问来源于stack exchange,提问作者Akash Anand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:25:23