发送请求时遇到了数据库完整性约束错误 1048 Column ‘platform‘ cannot be null
可以这样解决
在 Vue 2 中封装接口请求时,确保每次请求都包含 platform
Header 参数的最佳实践是通过创建一个全局的 Axios 实例,并为这个实例设置默认的 Header。这样可以确保所有通过该实例发送的请求都会自动包含 platform
参数。此外,你还可以使用 Axios 的拦截器来动态地为每个请求添加 Header。
全局 Axios 实例配置
首先,创建一个全局的 Axios 实例,并设置默认的 Header:
javascript
深色版本
// src/utils/request.js
import axios from 'axios';const service = axios.create({baseURL: process.env.VUE_APP_BASE_API, // 替换为你的 API 地址timeout: 5000, // 请求超时时间headers: {'Content-Type': 'application/json','platform': 'H5' // 默认平台值}
});export default service;
使用 Axios 拦截器动态设置 platform
如果你需要根据不同的条件动态设置 platform
值(例如根据用户选择或应用状态),你可以使用 Axios 的请求拦截器:
javascript
深色版本
// 继续在 src/utils/request.js 文件中// 请求拦截器
service.interceptors.request.use(config => {// 动态确定 platform 值,例如从 Vuex store 或本地存储获取const platform = localStorage.getItem('platform') || 'H5'; // 根据实际情况设置// 设置 platform Headerconfig.headers['platform'] = platform;return config;},error => {// 请求错误处理return Promise.reject(error);}
);export default service;
封装具体的 API 方法
接下来,你可以基于这个全局的 Axios 实例封装具体的 API 方法。这里以获取短信验证码为例:
// src/api/auth.js
import request from '@/utils/request';export function getMsgCode(captchaCode, captchaKey, mobile) {return request({url: '/captcha/sendSmsCaptcha',method: 'post',data: {captchaCode,captchaKey,mobile}});
}
在组件中使用封装好的 API
最后,在你的 Vue 组件中调用封装好的 API 方法。由于我们在全局 Axios 实例中已经设置了 platform
Header,因此不需要再单独为每个请求设置它。
// src/views/login/index.vue
<template><!-- 组件模板 -->
</template><script>
import { getMsgCode } from '@/api/auth';export default {name: 'LoginPage',data() {return {captchaCode: '',captchaKey: '',mobile: ''};},methods: {async handleGetMsgCode() {try {// 发送获取验证码请求await getMsgCode(this.captchaCode, this.captchaKey, this.mobile);this.$message.success('验证码已发送');} catch (error) {console.error("Error fetching SMS code:", error);this.$message.error('获取验证码失败,请稍后再试');}}}
};
</script>
总结
通过上述方法,你可以确保在 Vue 2 项目中,所有接口请求都会自动携带正确的 platform
Header 参数。这不仅简化了代码,还提高了可维护性和一致性。