Nuxt.js实战和配置详解

2020-06-12 21:26:56易采站长站整理
/layout/error.vue
自定义。

这里会遇到一个问题,

context.error
的参数必须是类似
{ statusCode: 500, message: '服务器开小差了~' }
statusCode
必须是http状态码, 而我们服务端返回的错误往往有一些其他的自定义代码,如
{resultCode: 10005, resultInfo: '服务器内部错误' }
,此时需要对返回的api错误进行转换一下。

为了方便,我引入了

/plugins/ctx-inject.js
为context注册一个全局的错误处理方法:
context.$errorHandler(err)
。注入方法可以参考: 注入 $root 和 context ,
ctx-inject.js
:


// 为context注册全局的错误处理事件
export default (ctx, inject) => {
ctx.$errorHandler = err => {
try {
const res = err.data
if (res) {
// 由于nuxt的错误页面只能识别http的状态码,因此statusCode统一传500,表示服务器异常。
ctx.error({ statusCode: 500, message: res.resultInfo })
} else {
ctx.error({ statusCode: 500, message: '服务器开小差了~' })
}
} catch {
ctx.error({ statusCode: 500, message: '服务器开小差了~' })
}
}
}

然后在

nuxt.config.js
使用该插件:


export default {
plugins: [
'~/plugins/ctx-inject.js'
]}

注入完毕,我们就可以在

asyncData
介个样子使用了:


export default {
async asyncData (ctx) {
// 尽量使用try catch的写法,将所有异常都捕捉到
try {
throw new Error()
} catch(err) {
ctx.$errorHandler(err)
}
}
}

ajax请求出错

对于ajax的异常,此时页面已经渲染,出现错误时不必跳转到错误页,可以通过

this.$toast.error(res.message)
toast出来即可。

loading方法

nuxt内置了页面顶部loading进度条的样式 推荐使用,提供页面跳转体验。 打开:

this.$nuxt.$loading.start()
完成:
this.$nuxt.$loading.finish()

打包部署

一般来说,部署前可以先在本地打包,本地跑一下确认无误后再上传到服务器部署。命令:


// 打包
npm run build