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

Angular向NestJS发送DELETE、PATCH请求返回404错误如何解决

问题根因

404错误的核心原因是前端请求方法与后端路由定义的请求方法不匹配:

  • 后端dishes.controller.ts中更新接口用@Patch装饰器定义为PATCH请求、删除接口用@Delete装饰器定义为DELETE请求
  • 前端dishes.service.ts中调用这两个接口时错误使用了POST方法,请求方法不匹配导致NestJS无法识别对应路由,返回404。

修复方案

修改Angular端dishes.service.ts的对应方法,改用匹配的请求方法:

// 更新方法改用PATCH请求
updateDish(dish: Dish) {
  return this.http.patch(`http://localhost:3000/dishes/update/${dish.id}`, dish);
} 
// 删除方法改用DELETE请求
deleteDish(dish: Dish) {
  return this.http.delete(`http://localhost:3000/dishes/delete/${dish.id}`);
}

可选优化(符合RESTful规范)

可以简化后端路由路径,去掉冗余的action标识,更符合通用接口设计规范:

// dishes.controller.ts 调整后代码
@Patch(':id')
async update(@Param('id', ParseIntPipe) id: number, @Body() dish: Dish): Promise<any> {
    dish.id = id
    return this.dishesService.update(dish);
}

@Delete(':id')
async delete(@Param('id', ParseIntPipe) id: number): Promise<any> {
    return this.dishesService.delete(id);
}

调整后前端请求路径对应改为http://localhost:3000/dishes/${dish.id}即可。

补充说明:上述代码中的ParseIntPipe是NestJS内置管道,用于自动将URL路径中的字符串id转换为数字类型,避免后续数据库操作出现类型不匹配错误,使用前需要从@nestjs/common包导入。

内容的提问来源于stack exchange,提问作者Jordan Castro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 03:06:10