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

如何修改Express路由以支持addToFavourite/removeFromFavourite的PUT请求?

解决方案

问题出在Express的路由匹配顺序上——它会按你定义路由的先后顺序进行匹配,你的动态路由/:id会把removeFromFavourite、addToFavourite这类字符串当成id参数来匹配,导致所有请求都走了旧的接口。按照下面的步骤修改即可:

1. 调整路由定义顺序

把addToFavourite和removeFromFavourite的具体路由,放在通用的/:id路由前面,让Express优先匹配具体接口:

// 先定义收藏相关的具体路由
router.put('/addToFavourite/:id', (req, res) => {
  // 获取路径参数里的餐厅ID
  const targetId = req.params.id;
  // 获取请求体里的comment数据
  const comment = req.body.comment;
  
  // 这里写添加收藏的业务逻辑
  console.log(`给餐厅${targetId}添加收藏,评论:${comment}`);
  res.status(200).json({ success: true, message: '添加收藏成功' });
});

router.put('/removeFromFavourite/:id', (req, res) => {
  const targetId = req.params.id;
  const comment = req.body.comment;
  
  // 这里写移除收藏的业务逻辑
  console.log(`移除餐厅${targetId}的收藏,评论:${comment}`);
  res.status(200).json({ success: true, message: '移除收藏成功' });
});

// 最后定义通用的动态ID路由
router.put('/:id', (req, res) => {
  // 原来的通用更新逻辑
});

2. 确保配置JSON解析中间件

要拿到请求体里的comment,必须在Express主文件(比如app.js)中配置express.json()中间件,否则req.body会是undefined:

const express = require('express');
const app = express();

// 解析JSON格式的请求体,必须放在挂载路由之前
app.use(express.json());

// 挂载restaurants路由
const restaurantsRouter = require('./routes/restaurants');
app.use('/restaurants', restaurantsRouter);

这样修改后,前端的两个PUT请求就会被正确路由到对应的接口,同时你也能正常获取到comment数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:15:43