Vue3前后端交互错误处理一致性
Vue3前后端交互错误处理一致性在Web开发中,前后端的交互中错误处理是不可避免的,比如:前端提交数据,后端需要校验,对于不符合要求的数据需要在前端进行提示。通常的做法是在后端返回固定格式的JSON数据来处理,但由于返回的JSON格式在业务、团队等方面很难维护其规范性,所以借助错误处理的方式,在数据请求中统一封装,这样有助于程序员将精力集中到业务处理中。1.环境开发环境前端Vue3后端Python
Vue3前后端交互错误处理一致性
在Web开发中,前后端的交互中错误处理是不可避免的,比如:前端提交数据,后端需要校验,对于不符合要求的数据需要在前端进行提示。通常的做法是在后端返回固定格式的JSON数据来处理,但由于返回的JSON格式在业务、团队等方面很难维护其规范性,所以借助错误处理的方式,在数据请求中统一封装,这样有助于程序员将精力集中到业务处理中。
1.环境
开发环境 | |
---|---|
前端 | Vue3 |
后端 | Python |
FastAPI |
2.后端处理规范
-
后端在数据处理中,对数据库的操作均需要捕获异常
-
对于捕获的异常可以通过错误处理给前端返回
-
返回错误的方法如下
首先,定义一个 JSONResponse ,为什么使用 JSONResponse,而不是 HTTPException 呢?因为我们在代码中对数据库的操作需要捕获异常,所以在try块中如果使用 HTTPException 会被代码本身捕获,而不会输出到前端。
然后,在出现错误的情况下,返回给前端即可。如:
from fastapi.responses import JSONResponse ...... json_response = JSONResponse(status_code=401, content={'detail': '鉴权失败'}) ...... return json_response
也可以是:
return JSONResponse( status_code=404, content='机构名称未找到!' )
对于content参数,既可以是字典数据,也可以是字符串。
3.前端处理规范
前端处理中,直接在封装好的请求方法中统一处理,代码如下:
import axios from 'axios' import swal from 'sweetalert' import {loading, loaded} from './loading' const config = { baseURL: '', timeout: 60000, headers: { 'Content-Type': 'application/json' }, responseType: 'json' } const postRequest = (url, data) => { let _id = loading() // eslint-disable-next-line const promise = new Promise((resolve, reject) => { config.headers['Authorization'] = localStorage.getItem('token_type') + ' ' + localStorage.getItem('access_token') axios.post( url, data, config ).then((response) => { loaded(_id) resolve(response) }).catch((error) => { loaded(_id) console.log(error) // 对error中的数据进行处理 let status = error.response.status let txt = errorToString(error) // 弹出错误信息 if (status === 401) { swal({ title: status.toString(), text: txt, icon: 'error', button: "确定", }).then((value) => { console.log(value) // 路由跳转 }) } else { swal(status.toString(), txt, 'error') } // reject(error) }) }) return promise } function errorToString (error) { let text = '' if (error.response.data) { if (error.response.data instanceof Object) text = JSON.stringify(error.response.data) else text = error.response.data } return text }
此处,针对返回的错误,对其数据进行处理,如果返回的是一个JSON格式的数据,则将其转换为字符串,否则直接显示。
对于401错误,在显示完错误信息后,进行路由跳转,一般的操作是直接跳转到登录页面。
更多推荐
所有评论(0)