首页 > 其他分享 >Vue面试题37:如何处理Vue项目中的错误?(总结自B站up主‘前端杨村长’视频,仅供自用学习)

Vue面试题37:如何处理Vue项目中的错误?(总结自B站up主‘前端杨村长’视频,仅供自用学习)

时间:2022-10-20 09:57:20浏览次数:52  
标签:面试题 Vue 错误 data 37 error 异常 response

  • 分析

    • 这是一个综合应用题目,在项目中我们常常需要将App的异常上报,此时错误处理就很重要了;这里要区分错误的类型,进而针对性做收集。然后将收集到的错误信息上报服务器;
  • 思路

    • 1.首先区分错误类型;
    • 2.如何根据错误的不同类型做相应处理;
    • 3.收集的错误如何上报给服务器;
  • 范例

    • 1.应用中的错误类型通常分为接口异常代码逻辑异常
    • 2.我们需要根据不同错误类型做相应处理:接口异常是我们请求后端接口过程中发生的异常,可能是请求失败,也可能是请求获得了服务器响应,但是返回的是错误状态。以Axios为例,这类异常我们可以通过封装Axios,在拦截器中统一处理整个应用中的请求错误。代码逻辑异常是我们编写的前端代码中存在逻辑上的错误造成的异常,Vue应用中最常见的方式是使用全局错误处理函数app.config.errorHandler 收集错误;
    • 3.收集到错误之后,需要统一处理这些异常:分析错误,获取需要的错误信息和数据。这里该有效区分错误类型,如果是请求错误,需要上报接口信息,参数,状态码等;对于前端逻辑异常,获取错误名称和详情即可。另外还可以收集应用名称、环境、版本、用户信息,所在页面等。这些信息可以通过 vuex或pinia存储的全局状态和路由信息获取;
  • 实践

  • // 处理接口异常
    // 响应拦截器
    requests.interceptors.response.use(
        (res) => {
            return res.data
        },
        (error) => {
            // 存在response说明服务器有响应
            if (error.response) {
                let response = error.response
                if (response.status >= 400) {
                    // 服务器异常
                    handleError(response, 1)
                } else {
                    handleError(null, 2)
                }
            }
            return Promise.reject(new Error(error))
        }
    )
    
    // 错误处理程序
    function handleError(error, type) {
        if (type == 1) {
            // 处理接口异常,从config字段中获取请求信息
            let { url, method, params, data } = error.config
            let err_data = {
                url,
                method,
                params: { query: params, body: data },
                error: error.data.message || JSON.stringify(error.data),
            }
        } else {
            // ...
        }
    }
    
    // 处理代码逻辑异常
    // Vue全局捕获错误信息
    app.config.errorHandler = (err, instance, info) => {
        let errData
        if (err instanceof Error) {
            let { name, message } = err
            errData = {
                type: name,
                error: message,
            }
        } else {
            errData = {
                type: "other",
                error: JSON.stringify(err),
            }
        }
        console.log("errData===", errData)
    }
    

标签:面试题,Vue,错误,data,37,error,异常,response
From: https://www.cnblogs.com/Mochenghualei/p/16808678.html

相关文章

  • vue3+vite的项目创建
    1、创建项目可以直接创建vite项目,选择vue即可,我这里用的yarn创建的(yarn在下载插件时,据说比npm稳定和快)yarncreatevite2、命名项目名可以自己输入对应的项目名3、......
  • Vue前端的 Excel 导入和导出功能
    Excel解析为JSON基本内容组件效果和结构组件内容是很简单的结构和视图,直接查看如下的页面效果和代码即可:  <template><inputtype="file"ref="exc......
  • Vue生命周期
    Vue生命周期生命周期就是我们从开始创建vue实例到销毁的一个过程,这一过程就叫做生命周期。方便我们在vue的各个阶段对其属性进行操作生命周期示例-----newVue实例化Vu......
  • vue源码解析
           入口   在runtime经过再次扩展  在core下的index再次被扩展   最后是core的instance里是真正的vue构造函数继续扩展vue实......
  • Vue 核心技术
    1.1Vue简介1.1.1官网英文官网中文官网1.1.2介绍与描述动态构建用户界面的渐进式JavaScript框架作者:尤雨溪1.1.3Vue的特点遵循MVVM模式编码简洁,体......
  • vue computed写法与传参
    //vue2computed:{fullName(){returnthis.firstName+this.lastName;}}//传参computed:{fullName(){return(params)=>{}......
  • Vue学习笔记之vue.js 两个等号 == 和三个等号===的区别
    /**==用于比较两者是否相等,忽略数据类型===用于更严谨的比较,值和值的数据类型都需要同时比较*/<!DOCTYPEhtml><htmllang="en"><head><metacharset="......
  • Vue组件是怎样挂载的
    我们先来关注一下$mount是实现什么功能的吧:我们打开源码路径core/instance/init.js:exportfunctioninitMixin(Vue:Class<Component>){......initLifec......
  • Vue模板是怎样编译的
    这一章我们开始讲模板解析编译:总结来说就是通过compile函数把tamplate解析成renderFunction形式的字符串compiler/index.jsimport{parse}from'./parser/index'imp......
  • Vue学习笔记之el-date-picker组建时间格式化方式
    <el-date-pickersize="small"v-model="editData.startTime"type="datetime"placeholder="选择日期时间"value-format="yyyy-MM-ddHH:mm:ss"format="yyyy-MM-ddHH:......