ESP对接后端API路由问题:POST请求失败及WebSocket连接需求
问题分析与解决方案
核心问题:路由路径匹配错误
你遇到的Cannot POST /update错误,根源是路由路径叠加导致实际接口地址与请求地址不匹配:
- 在
./Routes/data.js中,你给路由设置了/update的POST路径 - 而在
index.js中,又将这个路由模块挂载到了/update路径下 - 最终实际可用的接口地址是
http://localhost:5000/update/update,而非你请求的/update
两种修复方案
方案一:调整路由模块内的路径
修改./Routes/data.js,将路由路径改为根路径/,这样挂载到/update后,实际接口就是/update:
// ./Routes/data.js const express = require('express'); const router = express.Router(); // 修改路径为根路径 / router.post('/', async (req, res) => { const { userId } = req.query; const { message } = req.body; console.log(`Received message "${message}" for user ID: ${userId}`); // 后续数据处理逻辑... res.status(200).send('Data received successfully'); }); module.exports = router;
方案二:调整路由挂载路径
保持./Routes/data.js不变,修改index.js中的挂载路径为根路径/,这样原来的/update路由就会对应到/update地址:
// ./index.js // ...其他代码不变 // 将 app.use('/update', updateDataRoute); 修改为: app.use('/', updateDataRoute);
关于userId传递的验证
不管你是用query参数(如http://localhost:5000/update?userId=123)还是请求体(将userId放在body里),只要路径修复后,都能正常获取到参数:
- 如果用query:
const { userId } = req.query;可以正常读取 - 如果用body:改成
const { userId, message } = req.body;即可读取
WebSocket部分说明
你的WebSocket服务已经正确绑定到了Express服务器上,ESP设备可以通过ws://localhost:5000(生产环境替换为实际服务器地址)建立连接,不需要额外调整路径。
内容的提问来源于stack exchange,提问作者RAUSHAN KUMAR THAKUR
相关产品推荐
相关产品推荐

