Express.js中两段find方法代码的差异及无响应问题咨询
Express.js代码无法返回JSON响应的问题分析
我编写了一段Express.js代码(如下第一段),在浏览器中无法获取JSON响应;而讲师的代码(如下第二段)却可以正常返回。二者看似相同,想请教它们的区别:
第一段代码(无响应)
app.get("/api/products/1", (req, res) => { const singleProduct = products.find((product) => { product.id === 1; }); res.json(singleProduct); });
第二段代码(正常响应)
app.get("/api/products/1", (req, res) => { const singleProduct = products.find((product) => product.id === 1); res.json(singleProduct); });
核心区别:箭头函数的返回值规则
两段代码的差异集中在find方法的箭头函数回调上:
- 第一段用大括号
{}包裹回调逻辑,但没有写return语句。JavaScript规定,带大括号的箭头函数必须显式使用return才能返回值,否则默认返回undefined。这导致find遍历所有产品时,每次回调都返回undefined(等价于false),最终找不到匹配项,singleProduct为undefined,res.json(undefined)无法输出有效JSON。 - 第二段省略了大括号,属于箭头函数的简洁写法,这种情况下会自动返回箭头右侧表达式
product.id === 1的结果。当遇到id为1的产品时,表达式返回true,find就会返回该产品对象,res.json就能正常返回对应的JSON数据。
内容的提问来源于stack exchange,提问作者Jay Jay
相关产品推荐
相关产品推荐

