无框架Node.js API按指定产品ID查询无法返回对应产品如何解决
问题原因
核心问题是ID的类型不匹配:
你在server.js中通过req.url.split('/')[3]拿到的id是字符串类型(比如请求/api/products/1时拿到的是"1"),但products.js中所有产品的id字段都是数字类型。Array.prototype.find()的判断条件用了严格相等运算符===,会同时校验值和类型,两类id永远不相等,所以找不到匹配的产品。
修复方案
任选一种即可:
- 拿到id时直接转换为数字(推荐)
修改server.js中的id获取逻辑:
// 原代码 const id = req.url.split('/')[3] // 修改为 const id = Number(req.url.split('/')[3]) // 可增加合法性校验,避免传入非数字 if (isNaN(id)) { res.writeHead(400, { 'Content-Type': 'application/json' }); return res.end(JSON.stringify({message: '无效的产品ID'})) }
- 匹配时转换类型
修改productModel.js中find的判断逻辑:
// 原代码 const product = products.find(p => p.id === id) // 修改为 const product = products.find(p => p.id === Number(id))
其他注意事项
- 你代码中有几处笔误需要修正:
productController.js里的提示信息拼写错误,Prdouct应该为Product;注意文件名大小写、拼写要一致,比如server.js导入的是productControllers.js,你目录里的文件名是productController.js,避免出现模块找不到的报错。
内容的提问来源于stack exchange,提问作者Nishant Kumar
相关产品推荐
相关产品推荐

