【问题标题】:Cannot read property 'find' of undefined vue.js无法读取未定义 vue.js 的属性“查找”
【发布时间】:2021-09-04 01:44:08
【问题描述】:

所以我试图从另一个服务获取数据并将其转换为对象,并通过 ID 获取特定属性,但问题是我的数据似乎未定义,也许语法错误?但我不会这么说...

app.get ('/products&comments/:title', async (req , res) => {
    
    const title = req.params.title;
    
    const db = await connect();

    const doc = await db.collection("posts").findOne({title: title});
    
    
    const { comments } = await axios.get("http://localhost:4201/comments");
    
    const singleProductComment = await comments.find((comments) => comments.postID === doc._id);

    console.log(singleProductComment)

   res.json(singleProductComment)


});

有什么问题,const singleProductComment = await comments.find((comments) => comments.postID === doc._id);这个语法不是很好吗?

完整的错误信息:

Console.log(cmets) 输出:

【问题讨论】:

  • 为什么不在api中实现/comments?postId=呢?获取所有 cmets 然后在事后过滤它们似乎效率低下,如果它不是您的 API,那么您至少应该添加缓存
  • 你到底是什么意思? http://localhost:4201/comments?postId=doc._id?类似的东西?
  • 是的,所以它会按帖子 ID 过滤 cmets,如果它是您想要查找的特定评论,它将是 /comments/123,我只是指出获取所有 cmets 并不理想,想象你有 100k cmets,然后可能同时有 10 个人在你的网站上,服务器会拉一百万个东西只获取 10 个,更不用说说 1 条评论是 100 字节的 json,就像每个 API 请求 10MB,你应该尽可能多地卸载并传递参数
  • 我大致知道你想说什么,你能更准确地回答我的问题吗?

标签: javascript vue.js axios


【解决方案1】:

你的循环变量名 'cmets' 和数组变量名 'cmets' 是一样的,也不需要在查找之前等待。

 **comments**.find((**comments**) => **comments**.postID === doc._id);

应该是:

comments.find((comment) => comment.postID === doc._id);

这里:comments = [comment, comment, comment, comment];

【讨论】:

  • 好的,我这样做了,删除了 await 并循环了变量名 comment,但我仍然面临同样的错误 undefined of 'find()'
  • 如果我 console log cmets 我得到正常输出,正常值
  • 还要检查“cmets”是否是一个数组而不是对象。
  • 我在一个问题中更新了完整的错误信息
  • 如果是数组呢?如何将其转换为 JSON 对象?
猜你喜欢
  • 2021-12-21
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 2021-02-07
  • 2018-07-27
  • 1970-01-01
相关资源
最近更新 更多