Express条件判断无响应求助:接口请求一直处于处理状态
问题分析与修复
你的代码存在两个关键问题,导致请求一直处于挂起状态:
参数类型不匹配
req.params.id从URL中获取到的是字符串类型,而你用严格相等运算符===和数字1做比较,两者类型不同,这个条件永远不会成立,所以res.json(id)永远不会执行。未处理所有请求分支
当请求的id不满足你的条件时,你没有向客户端返回任何响应,Express会一直保持这个请求的连接,直到超时,这就是你看到的"请求一直处于处理状态"的原因。
修复后的代码
const express = require("express"); const app = express(); app.get("/api/products/:id", function (req, res) { const id = req.params.id; // 要么把数字转为字符串比较,要么把参数转为数字比较 if (id === "1") { res.json(id); } else { // 处理其他情况,返回合适的响应,比如404或者提示信息 res.status(404).json({ message: "产品不存在" }); } }); // 别忘了启动服务器 app.listen(3000, () => { console.log("服务器运行在3000端口"); });
额外提示
- 如果你需要处理数字类型的
id,可以把req.params.id转为数字:const id = Number(req.params.id);,之后再和数字1用===比较就没问题了。 - 任何Express的请求处理函数都必须调用
res对象的响应方法(比如res.json()、res.send()、res.status().end()等),否则请求会一直挂起。
内容的提问来源于stack exchange,提问作者Juan Camilo Orjuela
相关产品推荐
相关产品推荐

