非常教程

Lavas参考手册

进阶教程

错误处理

Lavas 的错误处理采用中间件的方式,分别在 express 和 koa 两种模式下添加中间件,用以捕获之后抛出的一切错误,带上错误信息一并跳转到配置好的错误处理路径。因此,除了配置错误路径之外,还需要编写一个错误处理页面,供跳转使用。

错误配置

Lavas 的错误处理相关的配置比较简洁,在 /lavas.config.js 中找到 errorHandler 对象,如下:

12345// ...
errorHandler: {
    errorPath: '/error'
}
// ...

唯一的配置项 errorPath 用以标识出错时往哪个路由跳转。默认值是 /error,因此还需要 /pages/Error.vue 存在。如果开发者对默认值能够接受,可以在 /lavas.config.js 中省略 errorHandler 配置。

错误页面

如果采用 lavas init 直接生成初始项目,/pages/Error.vue 已经存在;如果在上述配置中修改过 errorPath,那么在这里我们就需要在 /pages/ 创建对应的 vue 页面组件。

在错误页面中,我们可以通过 this.$route.params.error 来获取错误信息。但这个值也可能不存在,因此还需要设置一个默认值,如:

1234567// vue script
computed: {
    message() {
        return this.$route.params.error || 'Oops! Something is not quite right o(╥﹏╥)o';
    }
},
// ...

在中间件中,Lavas 会往 /error?error=xxx 跳转。如果开发者觉得错误信息直接显示在地址栏无法接受,可以在错误页面再增加一次处理,将错误从 URL 上隐藏起来。

1234567891011// vue script
created() {
    let query = this.$route.query;
    if (Object.keys(query).length !== 0) {
        this.$router.replace({
            name: 'error',
            params: query
        });
    }
}
// ...

404 错误

由于 Lavas 会自动创建路由规则,因此在创建时对错误路由会进行特殊处理,将错误路径放在最后一条作为备份。如果您对 vue-router 比较熟悉的话,可以参考下面的代码(节选自 /.lavas/route.js)进行理解:

12345678910let routes = [
    // other routes ...
    {
        path: '/error',
        name: 'error',
        component: _cb5e100e5a9a3e7f6d1fd97512215282,
        meta: {},
        alias: '*'
    }
];

所以当有未被匹配的路由出现时,因为 alias: * 的设置,会被匹配到错误路径。这种情况下并没有错误信息,所以错误页面中 error 为空,这也是错误页面中 error 应当有默认值的原因。

Lavas 为什么采用跳转而非停留在原页面 (扩展)

提示:这部分内容由 Lavas 内部处理,并不需要开发者进行参与,仅仅作为解答开发者疑问的扩展阅读存在。

Lavas 在出错时会携带错误信息往 /error (默认情况下) 进行跳转。但是这样会导致用户无法恢复出错前的路由,因为当前的 URL 已经是 /error,再次刷新也只会停留在错误页而已。理想的情况应该是 URL 保持出错前用户访问的页面,而页面内容展现为错误页的内容,这样错误恢复时可以通过刷新解决。Lavas 为什么做不到这样呢?

这和 Lavas 内置的 SSR 有关。熟悉 Vue SSR 的开发者应该了解,其中有个步骤叫做客户端激活 (Client-side Hydration),大致是说 Vue 在浏览器端接管由服务端发送的静态 HTML,使其变为由 Vue 管理的动态 DOM 的过程。这里要求前后两端的 HTML 结构是一致的,因此如果出现 URL 和实际渲染的 DOM 不匹配的情况,SSR 会抛出一个错误。

当然从用户体验角度来说,直接跳转的确有损体验,我们会继续学习研究,努力实现更好更顺滑的错误处理模式。

Lavas

Lavas 是一套基于 Vue 的 PWA 解决方案,能够帮助开发者快速搭建 PWA 应用,解决接入 PWA 的各种问题,对提升用户体验,用户留存率等有明显提升,且开发者无须过多的关注 PWA 开发本身。

Lavas目录

1.基础教程
2.进阶教程
3.webpack 相关
4.更多