Vue3控制台无法打印MongoDB集合数据,求排查方案
问题排查与解决
你console.log没输出内容,大概率不是log位置的问题(它已经写在axios请求完成、数据赋值之后),更可能是以下几个原因:
1. 过滤条件太严格,无符合数据
你的isRecentlyUpdated只保留15秒内更新的文档,如果接口返回的所有数据updatedAt都超过15秒,过滤后自然是空数组,控制台就没内容输出。
2. updatedAt格式异常,日期转换失败
如果接口返回的updatedAt不是标准日期格式(比如非ISO字符串、时间戳格式错误),new Date(updatedAt)会生成无效日期,updatedTime.getTime()返回NaN,此时Date.now() - NaN也是NaN,NaN < 15000结果为false,所有数据都会被过滤掉。
3. 接口本身返回空数组
可能请求成功了,但后端返回的collection1Response.data本身就是空的,那不管怎么过滤都是空。
排查步骤:
先打印原始数据,确认接口是否返回内容:
替换当前console.log为:console.log('接口返回的原始数据:', collection1Data.value);查看控制台是否有数据输出。
检查日期转换是否正常:
在isRecentlyUpdated函数中添加日志:const isRecentlyUpdated = (updatedAt) => { const updatedTime = new Date(updatedAt); console.log('处理的updatedAt:', updatedAt, '转换后的日期:', updatedTime, '时间戳:', updatedTime.getTime()); return (Date.now() - updatedTime.getTime()) < 15000; };观察输出的日期是否有效,时间戳是否为数字。
临时放宽过滤条件测试:
把isRecentlyUpdated的返回值改成true,或者将15000改为更大数值(比如86400000,即24小时),看console.log是否有内容。确认请求无隐藏异常:
给Promise.all添加错误捕获:const fetchData = async () => { try { const [collection1Response, collection2Response] = await Promise.all([ axios.get('https://koh-ontvsound:53500/onboardshows'), axios.get('https://koh-ontvsound:53500/onboardlands'), ]); collection1Data.value = collection1Response.data; collection2Data.value = collection2Response.data; console.log(collection1Data.value.filter(data => isRecentlyUpdated(data.updatedAt))); } catch (err) { console.error('请求出错:', err); } };
内容的提问来源于stack exchange,提问作者Nopmd
相关产品推荐
相关产品推荐

