文档里其实已经写明了,但还是过一遍吧。
问题描述
调接口后,当response返回404,500等status code时,进行统一处理,render到错误页面。
环境
Nuxt v2.6.2, nuxtjs/axios v5.3.6.
步骤
Nuxt 在context 中添加了一个error(params)
方法,下面正是通过调用这个方法来调错误页面。
两步即可:
在
plugins/axios.js
文件中,统一添加错误处理:export default function ({ $axios, error }) { $axios.onError(e => { if(e.response.status === 403) { error({ statusCode: 403, message: "forbidden" }) } if(e.response.status === 404) { error({ statusCode: 404, message: "not found" }) } if(e.response.status === 500) { error({ statusCode: 500, message: "server error" }) } }) }
每次axios 发送请求后,当response 返回错误时,会调用error这个method,而error 这个方法可以用来调用错误页面 error page。
在layouts 中添加
error.vue
文件,这个文件就是出错时render的error page.error.vue
的内容可以长这样:<template> <div class="container"> <h1 v-if="error.statusCode === 403">Forbidden</h1> <h1 v-if="error.statusCode === 404">Page not found</h1> <h1 v-if="error.statusCode === 500">Server Error</h1> <nuxt-link to="/">Home page</nuxt-link> </div> </template> <script> export default { props: ['error'], layout: 'blank' } </script>
这里需要注意的是:
当前版本的nuxt,在
error.vue
中设置layout是无效的。不过这个问题已修复,下一版本应该会发布,戳bug(csr): error page layout not correctly applied #2537 可查看详情。
「2019-10-14更新: 在2.10.0版本中,已经修复了该问题,可查看release了解」
好了,搞定,收工!!