如何修改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
相关产品推荐
相关产品推荐

