Express.js中if-else仅返回布尔值,代码块不执行问题求助
Express.js路由if-else代码块不执行的问题解决
你的问题出在这行代码:
const found = res.json(products.inventory.some(item => item.id === parseInt(req.params.id)));
res.json()方法会立刻向客户端发送响应并终止当前请求的处理流程,所以你把它赋值给found的同时,已经把true/false返回给客户端了,后面的if-else代码根本没机会运行。
修正后的代码如下:
const productId = parseInt(req.params.id); // 先判断产品是否存在,不提前发送响应 const found = products.inventory.some(item => item.id === productId); if(found){ // 用find获取单个产品,比filter更适合单ID查询场景 const targetProduct = products.inventory.find(item => item.id === productId); res.json(targetProduct); }else{ // 产品不存在应该返回404(资源未找到),更符合HTTP规范 res.status(404).json({msg: "请求的产品不存在!"}); }
额外优化点:
- 把
parseInt(req.params.id)提取为变量,避免重复执行解析操作 - 用
find替代filter:因为产品ID通常是唯一的,find直接返回匹配的单个对象,比返回数组更合理 - 错误状态码改为404:400是请求格式错误,404才是资源不存在的标准状态码
内容的提问来源于stack exchange,提问作者Kibits
相关产品推荐
相关产品推荐

