vue.js - Nuxt.js 并处理动态页面的 API 404 响应

标签 vue.js nuxt.js

我使用 Nuxt.js 并且我有动态页面 /items/{id}:

<template>
  <div>
    <h1>Item #{{ item.id }} &laquo;{{ item.title }}&raquo;</h1>
  </div>
</template>

<script>
import { api } from '../../mo/api'

export default {
  asyncData({ params }) {
    return api(`items/${params.id}`)
  },
}
</script>

后端 API 返回对象 {item: {id: .., title: "...", ...}}。 但是,如果具有指定 ID 的项目不存在,API 将返回 404 响应。 Vue 崩溃并显示“[Vue warn]:属性或方法“item”未在实例上定义,但在渲染期间被引用。”

如何处理 404 响应?

我的 api.js 模块:

import axios from 'axios'

export function api(url) {
  url = encodeURIComponent(url)
  return axios
    .get(`http://localhost:4444/?url=${url}`)
    .then(({ data }) => {
      return data
    })
    .catch((err) => {
      // 404 catch there
    })
}

解决方案:

需要阅读手册:https://nuxtjs.org/guide/async-data/#handling-errors

最佳答案

只需执行错误函数:)

<script>
export default {
  asyncData({ params, error }) {
    return axios
      .get(`https://my-api/posts/${params.id}`)
      .then((res) => {
        return { title: res.data.title }
      })
      .catch((e) => {
        error({ statusCode: 404, message: 'Post not found' })
      })
  },
}
</script>

关于vue.js - Nuxt.js 并处理动态页面的 API 404 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53500137/

相关文章:

node.js - Nuxt 安装错误 : Rule can only have one resource source (provided resource and test + include + exclude)

javascript - Nuxt.js 文档未定义(vuejs-datepicker)

vue.js - 我如何在 Nuxtjs 和 Vuejs 中更新 <source src ="data">

vue.js - SCSS/SASS文件不适用于 Electron nuxt

javascript - 在 Vue 应用程序中显示用户友好的错误消息

javascript - 从 vue.js 过滤器返回 vue 实例 (Vue.js 2)

google-chrome - Vue.js 开发工具未显示

node.js - Electron + Vue + msal-nodejs + Azure 广告 : redirect URL issue

javascript - 使用在父级中导入的 <component>

vue.js - 如何在vue nuxtjs中监听滚动事件?