Node.js Express服务器路由问题排查:请求无控制台日志
问题分析与修复方案
核心问题拆解
中间件提前终止响应周期
你的app.use("/dashboard", ...)中间件中,调用res.send(accounts)后,HTTP响应已被发送,后续的next()不会触发下一个路由处理函数。这直接导致POST请求的代码完全没有执行机会,自然看不到控制台日志。路由参数正则语法错误
Express中路由参数的正则需要包裹在括号内,正确写法是/:address(正则规则),而非/:address{6}。另外你发送的请求地址0x1234仅4位有效字符,不满足你预期的6位要求,即使路由写法正确也无法匹配。app.listen参数格式错误app.listen的参数顺序为(端口, 主机名, 回调函数),你传入的第三个参数650是无效值,会干扰服务器启动逻辑。
修复后的完整代码
const express = require("express"); const app = express(); const accounts = []; // 修改中间件:移除提前发送响应的逻辑,仅做请求传递 app.use("/dashboard", function(req, res, next) { console.log("请求进入/dashboard路径"); next(); }); // 修复路由参数正则,适配带0x前缀的6位地址 app.post("/dashboard/add-account/:address(0x[a-fA-F0-9]{6})", function(req, res) { accounts.push(req.params.address); console.info(accounts); res.send("账户添加成功"); }); app.put("/modify-account/:index([0-9]+)/:address(0x[a-fA-F0-9]{6})", function(req, res) { const index = parseInt(req.params.index); if (index >= 0 && index < accounts.length) { accounts[index] = req.params.address; res.send(accounts); } else { res.status(400).send("索引无效"); } }); app.delete("/dashboard/delete-account/:index([0-9]+)", function(req, res) { const index = parseInt(req.params.index); if (index >= 0 && index < accounts.length) { accounts.splice(index, 1); // 正确删除数组元素,而非设为空字符串 console.info(accounts); res.send("账户删除成功"); } else { res.status(400).send("索引无效"); } }); // 修复listen参数,移除无效的650 app.listen(3001, "127.0.0.1", () => { console.info("Server is ready ..."); });
关键修改说明
- 中间件:去掉
res.send,确保请求能传递到后续路由处理函数; - 路由正则:将参数规则放在括号内,同时调整正则匹配带
0x前缀的6位地址(如0x123456); - 删除逻辑:用
splice正确删除数组元素,避免数组残留空值; - 启动参数:移除无效的
650,保证服务器正常启动。
测试验证
发送POST请求http://localhost:3001/dashboard/add-account/0x123456,此时控制台会输出添加后的accounts数组,问题解决。
内容的提问来源于stack exchange,提问作者Alireza
相关产品推荐
相关产品推荐

