返回

《全栈导航》宕机排查:路由跳转正常,父级数据丢失

前端

《全栈导航》网站突然宕机

作为一名全栈开发人员,我遇到了一些棘手的问题。我负责维护的《全栈导航》网站突然宕机,只有在通过路由跳转时才能正常访问。这让我很困惑,于是我着手排查问题。

第一步:检查父级页面数据

经过初步调查,我发现问题出在父级页面请求的数据传送到子组件时丢失了。为了验证这一点,我检查了子组件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解决了问题。