Array Find() 方法在搜索有关 URL 参数的数据时始终返回“未定义”
Posted
技术标签:
【中文标题】Array Find() 方法在搜索有关 URL 参数的数据时始终返回“未定义”【英文标题】:Array Find() method is always returning 'undefined' while searching data with respect to URL parameters 【发布时间】:2022-01-14 00:54:11 【问题描述】:我想显示整个数据数组中的数据,这些数据应该满足请求的 id 与数据的 id 匹配的条件。但是每次我尝试下面的代码时,我只会得到“未定义”作为 find 方法的输出。
代码
import express from 'express';
import data from "./data.js"
const app=express();
app.get('/products/api/:id',(req,res)=>
const product = data.products.find((x) => x.id === req.params.id);
if (product)
res.send(product)
else
res.status(404).send(message:`Product Not Found$req.params.id`);
) app.get('/products/api',(req,res)=>
res.send(data.products)
) app.get('/',function(req,res)
res.send("server is ready")
) const port=process.env.PORT || 5000 app.listen(5000,()=>
console.log(`serve at http://localhost:$port`);
)
【问题讨论】:
此代码不能在任何地方使用.find()
您的意思是 filter() 而不是 find()?
嗨,如果您的意思是过滤而不是查找,请确保来自请求和数据数组的 id 都与您使用的数据类型相同 === (严格条件)意味着 1 === ' 1' 是 false 应该是 1 === 1 否则使用 ==,希望对你有所帮助。
是的,对不起,我上传了错误的代码,它是查找而不是过滤器,我已经更新了它。
我找到了答案` const h=parseInt(req.params.id) const product = data.products.find((x) => x.id ===h ); `
【参考方案1】:
您的代码缺少正文解析中间件。 尝试添加一个
app.use(express.json( extended: true ))
在您的路线之前。
另外请检查来自data.products.find((x) => x.id === req.params.id);
的id
是否属于string
类型。它可能是 number
或 ObjectId
mongoose 对象 ID。
【讨论】:
这有什么关系?该代码未尝试访问req.body
。它正在读取的数据在 URL 而不是正文中。
你可能是对的,但他在某些时候仍然需要它。无论如何,我编辑了我的答案,以包括为什么这可能会失败的另一种可能性。【参考方案2】:
你需要做的就是,
改变这个:
const product = data.products.find((x) => x.id === req.params.id);
到:
const product = data.products.find((x) => x.id == req.params.id);
【讨论】:
以上是关于Array Find() 方法在搜索有关 URL 参数的数据时始终返回“未定义”的主要内容,如果未能解决你的问题,请参考以下文章
[二分搜索] leetcode 34 Find First and Last Position of Element in Sorted Array
LeetCode 153, 154. Find Minimum in Rotated Sorted Array I & II