nuxt.js寫項(xiàng)目時(shí)增加錯(cuò)誤提示頁(yè)面操作
為項(xiàng)目增加錯(cuò)誤提示頁(yè)面,比如后端接口沒(méi)有數(shù)據(jù)或接口報(bào)錯(cuò)的時(shí)候,如果不增加錯(cuò)誤提示頁(yè)面的話,那接口報(bào)錯(cuò)的信息就會(huì)在頁(yè)面中顯示,這顯然不利于用戶體驗(yàn)。
實(shí)際操作過(guò)程中,可能因?yàn)楦鞣N原因無(wú)法顯示正確的返回頁(yè)面,比如本身這篇文章的id不存在,或者網(wǎng)絡(luò)請(qǐng)求問(wèn)題,這時(shí)候就需要一個(gè)錯(cuò)誤展示頁(yè)用來(lái)提示用戶;
nuxt.js官方也有錯(cuò)誤提示頁(yè)面的寫法:傳送門-> 官方錯(cuò)誤提示頁(yè)面的寫法
此項(xiàng)目中的錯(cuò)誤提示頁(yè)面是放在layouts目錄中:

layouts中的error.vue頁(yè)面內(nèi)容為:
<template> <div class="err_wrap"> <h1 class="error" v-if="error.statusCode === 404">頁(yè)面不存在或沒(méi)有數(shù)據(jù)</h1> <h1 class="error" v-else>應(yīng)用發(fā)生錯(cuò)誤異常</h1> <nuxt-link class="to_home" to="/">返回首頁(yè)</nuxt-link> </div> </template>
<script>
export default {
props: ['error'],
layout: 'detail',
data() {
return {
msg: '未找到相應(yīng)頁(yè)面或沒(méi)有數(shù)據(jù)'
}
}
}
</script>
<style scoped>
.err_wrap {
padding: 0.2rem 0.4rem;
text-align: center;
}
.error {
font-size: 0.32rem;
text-align: center;
padding-top: 55%;
color: #582c1a;
padding-bottom: 0.4rem;
}
.to_home {
font-size: 0.3rem;
color: #582c1a;
display: inline-block;
padding-bottom: 3.9rem;
}
</style>
在頁(yè)面組件中是在asyncData的catch中寫的,當(dāng)接口調(diào)用出錯(cuò)或無(wú)數(shù)據(jù)時(shí)就會(huì)跳轉(zhuǎn)到錯(cuò)誤提示頁(yè)面:
async asyncData(context, callback) {
try {
// console.log("_id的id:====", context.params.id)
let paramsWorksList = {
id: context.params.id
}
let WorksDetail = await context.$axios.post(`/anchor/worksList`, paramsWorksList)
// console.log("WorksDetail:=====", WorksDetail.data.data[0])
return {
WorksDetail: WorksDetail.data.data[0]
}
} catch (err) {
console.log("errConsole========:", err)
callback({ statusCode: 404, message: '頁(yè)面未找到或沒(méi)有數(shù)據(jù)!' }) //當(dāng)接口無(wú)數(shù)據(jù)或接口出錯(cuò)時(shí)會(huì)執(zhí)行這句代碼跳轉(zhuǎn)到錯(cuò)誤提示頁(yè)面
}
},
這里有一個(gè)坑,asyncData的callback在nuxt.js的2.3.X版本給廢棄了,運(yùn)行項(xiàng)目總是提示:
Callback-based asyncData, fetch or middleware calls are deprecated. Please switch to promises or async/await syntax
經(jīng)過(guò)google發(fā)現(xiàn)的,nuxt.js的作者覺(jué)得callback沒(méi)什么用,給去掉了。
github issue鏈接:https://github.com/nuxt/nuxt.js/issues/4158
所以經(jīng)過(guò)查看文檔,error的屬性在context這個(gè)參數(shù)中,頁(yè)面組件中的代碼如下:
async asyncData(context) {
try {
// console.log("_id的id:====", context.params.id)
let paramsWorksList = {
id: context.params.id
}
let WorksDetail = await context.$axios.post(`/anchor/worksList`, paramsWorksList)
// console.log("WorksDetail:=====", WorksDetail.data.data[0])
return {
WorksDetail: WorksDetail.data.data[0]
}
} catch (error) {
console.log("errConsole========:", context.error({ statusCode: 404, message: '頁(yè)面未找到或無(wú)數(shù)據(jù)' }))
context.error({ statusCode: 404, message: '頁(yè)面未找到或無(wú)數(shù)據(jù)' }) //修改成這樣就可以跳到錯(cuò)誤提示頁(yè)面
}
},
在 asyncData 請(qǐng)求時(shí)添加參數(shù) callback,如果請(qǐng)求正確,則 callback 的第一個(gè)參數(shù)為 null,第二個(gè)參數(shù)為賦值對(duì)象;
如果請(qǐng)求錯(cuò)誤,則直接將對(duì)象為參數(shù),包括 statusCode 錯(cuò)誤代碼以及 message 錯(cuò)誤信息,以便處理不同的錯(cuò)誤信息展示;
最終效果如下:

補(bǔ)充知識(shí):Nuxt的錯(cuò)誤頁(yè)面和個(gè)性meta設(shè)置
當(dāng)用戶輸入路由錯(cuò)誤的時(shí)候,我們需要給他一個(gè)明確的指引,所以說(shuō)在 應(yīng)用程序開發(fā)中404頁(yè)面時(shí)必不可少的。Nuxt.js支持直接再默認(rèn)布局文件夾里建立錯(cuò)誤頁(yè)面。
建立錯(cuò)誤頁(yè)面
在根目錄下的layouts文件夾下建立一個(gè)error.vue文件,它相當(dāng)于一個(gè)顯示應(yīng)用錯(cuò)誤的組件。
<template>
<div class="error">
<h2 v-if="error.statusCode == 404">404 - 頁(yè)面不存在</h2>
<h2 v-else>500 - 服務(wù)器錯(cuò)誤</h2>
<ul>
<!-- 這里用來(lái)提示返回到主頁(yè) -->
<li><nuxt-link to="/">HOME</nuxt-link></li>
</ul>
</div>
</template>
<script>
export default {
props: ['error']
}
</script>


代碼用v-if進(jìn)行判斷錯(cuò)誤類型,需要注意的是這個(gè)錯(cuò)誤時(shí)你需要在<script>里進(jìn)行聲明的。
個(gè)性meta設(shè)置
頁(yè)面的Meta對(duì)于SEO的設(shè)置非常重要,比如你現(xiàn)在要做個(gè)新聞頁(yè)面,那為了搜索搜索引擎對(duì)新聞的收錄,需要每個(gè)頁(yè)面對(duì)新聞都有不同的title和meta設(shè)置。直接使用head方法來(lái)設(shè)置當(dāng)前頁(yè)面的頭部信息就可以了。
我們現(xiàn)在要把New-1這個(gè)頁(yè)面設(shè)置成個(gè)性的meta和title。
1.我們先把pages/news/index.vue頁(yè)面的鏈接進(jìn)行修改一下,傳入一個(gè)title,目的是為了在新聞具體頁(yè)面進(jìn)行接收title,形成文章的標(biāo)題。
/pages/news/index.vue
<template>
<div>
<h2>News Index page</h2>
<p>NewID:{{$route.params.newsId}}</p>
<ul>
<li><nuxt-link :to="{name:'index'}">Home</nuxt-link></li>
<li><nuxt-link :to="{name:'news-id',params:{id:123,title:'我是新聞標(biāo)題'}}">News-1</nuxt-link></li>
</ul>
</div>
</template>
<script>
export default {
}
</script>
第一步完成后,我們修改/pages/news/_id.vue,讓它根據(jù)傳遞值變成獨(dú)特的meta和title標(biāo)簽。
<template>
<div>
<h2>News-Content [{{$route.params.id}}]</h2>
<ul>
<li><a href="/" rel="external nofollow" >Home</a></li>
</ul>
</div>
</template>
<script>
export default {
validate ({ params }) {
// Must be a number
return /^\d+$/.test(params.id)
},
data(){
return{
title:this.$route.params.title,
}
},
//獨(dú)立設(shè)置head信息
head(){
return{
title:this.title,
meta:[
{hid:'description',name:'news',content:'This is news page'}
]
}
}
}
</script>
注意:為了避免組件中的meta標(biāo)簽不能正確覆蓋父組件中相同的標(biāo)簽而產(chǎn)生重復(fù)的現(xiàn)象,建議利用hid鍵為meta標(biāo)簽配一個(gè)唯一的標(biāo)識(shí)編號(hào)。

以上這篇nuxt.js寫項(xiàng)目時(shí)增加錯(cuò)誤提示頁(yè)面操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- nuxt.js添加環(huán)境變量,區(qū)分項(xiàng)目打包環(huán)境操作
- Docker部署Nuxt.js項(xiàng)目的實(shí)現(xiàn)
- nuxt.js服務(wù)端渲染中axios和proxy代理的配置操作
- Nuxt.js nuxt-link與router-link的區(qū)別說(shuō)明
- Nuxt.js的路由跳轉(zhuǎn)操作(頁(yè)面跳轉(zhuǎn)nuxt-link)
- nuxt.js 在middleware(中間件)中實(shí)現(xiàn)路由鑒權(quán)操作
- Nuxt.js 靜態(tài)資源和打包的操作
- 創(chuàng)建nuxt.js項(xiàng)目流程圖解
- nuxt.js 多環(huán)境變量配置
相關(guān)文章
Vue實(shí)現(xiàn)插槽下渲染dom字符串的使用
本文主要介紹了Vue實(shí)現(xiàn)插槽下渲染dom字符串的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
客戶端(vue框架)與服務(wù)器(koa框架)通信及服務(wù)器跨域配置詳解
本篇文章主要介紹了客戶端(vue框架)與服務(wù)器(koa框架)通信及服務(wù)器跨域配置詳解,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
vue網(wǎng)絡(luò)請(qǐng)求方案原生網(wǎng)絡(luò)請(qǐng)求和js網(wǎng)絡(luò)請(qǐng)求庫(kù)
這篇文章主要為大家介紹了網(wǎng)絡(luò)請(qǐng)求方案原生網(wǎng)絡(luò)請(qǐng)求和js網(wǎng)絡(luò)請(qǐng)求庫(kù)的過(guò)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
vue項(xiàng)目使用lodash節(jié)流防抖函數(shù)問(wèn)題解決方案
在lodash函數(shù)工具庫(kù)中,防抖 _.debounce 和節(jié)流 _.throttle 函數(shù)在一些頻繁觸發(fā)的事件中比較常用,這篇文章主要介紹了vue項(xiàng)目使用lodash節(jié)流防抖函數(shù)問(wèn)題與解決,需要的朋友可以參考下2023-10-10
vue引入jquery時(shí)報(bào)錯(cuò) $ is not defined的問(wèn)題及解決
這篇文章主要介紹了vue引入jquery時(shí)報(bào)錯(cuò) $ is not defined的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-09-09
vue項(xiàng)目運(yùn)行時(shí)出現(xiàn)It works的問(wèn)題解決
本文主要介紹了vue項(xiàng)目運(yùn)行時(shí)出現(xiàn)It works的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07

