返回
《全栈导航》宕机排查:路由跳转正常,父级数据丢失
前端
2023-09-14 02:37:26
《全栈导航》网站突然宕机
作为一名全栈开发人员,我遇到了一些棘手的问题。我负责维护的《全栈导航》网站突然宕机,只有在通过路由跳转时才能正常访问。这让我很困惑,于是我着手排查问题。
第一步:检查父级页面数据
经过初步调查,我发现问题出在父级页面请求的数据传送到子组件时丢失了。为了验证这一点,我检查了子组件Detail.vue
中的数据:
export default {
data() {
return {
detailData: {}
}
}
}
在mounted
生命周期钩子中,我添加了一个日志语句,用于记录detailData
的数据:
mounted() {
console.log(this.detailData)
}
刷新页面后,控制台显示detailData
为一个空对象,这证实了我的猜想。
第二步:查看服务器日志
接下来,我查看了服务器日志,以获取有关父级页面请求的更多信息。我发现了一个错误消息,指出服务器在处理请求时遇到了问题:
[error] GET /api/detail/:id 500 (123ms)
这个错误表明服务器在处理来自父级页面的数据请求时遇到了问题。
第三步:使用nuxt
为了进一步排查问题,我使用了nuxt框架中提供的调试工具。我添加了以下代码来监视父级页面的fetch
请求:
async fetch({ store }) {
try {
const data = await this.$axios.$get(`/api/detail/${id}`)
store.commit('setData', data)
} catch (error) {
console.error(error)
}
}
通过在控制台中检查请求,我发现服务器响应了正确的JSON数据,但这并未传递到子组件。
解决方案
经过一番研究,我发现问题出在子组件的props
中。我忘记将detailData
作为prop
传递给子组件。添加以下代码解决了这个问题:
// page.vue
export default {
components: {
Detail
},
props: {
detailData: {}
}
}
总结
通过一系列的排查步骤,我确定了《全栈导航》网站宕机的原因是父级页面请求的数据在传送到子组件时丢失了。我检查了父级页面数据、服务器日志并使用了nuxt的调试工具来识别问题,然后通过更新子组件的props
解决了问题。