当前位置:   article > 正文

springboot3 + vue3 从写代码到发布遇到问题记录_vue3与springboot相关问题

vue3与springboot相关问题

解决跨域问题  No 'Access-Control-Allow-Origin' header is present on the requested resource.

参考vite构建的本地开发环境请求第三方接口时如何解决跨域问题-腾讯云开发者社区-腾讯云

报错图片

解决办法:

1. 在vue项目中添加代理,打开vite.config.js,添加代码

  1. // https://vitejs.dev/config/
  2. export default defineConfig({
  3. plugins: [
  4. vue(),
  5. AutoImport({
  6. resolvers: [ElementPlusResolver()]
  7. }),
  8. Components({
  9. resolvers: [ElementPlusResolver()]
  10. })
  11. ],
  12. resolve: {
  13. alias: {
  14. '@': fileURLToPath(new URL('./src', import.meta.url))
  15. }
  16. },
  17. // 设置代理,解决跨域问题
  18. server: {
  19. https: false,
  20. // 是否自动在浏览器打开
  21. open: true,
  22. cors: true,
  23. proxy: {
  24. '/path': {
  25. target: 'http://localhost:8080', // 接口域名,接口服务器地止
  26. changeOrigin: true,
  27. secure: false,
  28. rewrite: (path) => path.replace(/^\/path/, '')
  29. }
  30. }
  31. }
  32. })

2. 发送axios请求时,接口地址要写成 ‘/path’,直接封装

  1. import router from '@/router'
  2. import { useUserStore } from '@/stores'
  3. import axios from 'axios'
  4. import { ElMessage } from 'element-plus'
  5. // 地址替换成 /path
  6. const baseURL = '/path'
  7. const instance = axios.create({
  8. timeout: 5000,
  9. baseURL: baseURL
  10. })
  11. instance.interceptors.request.use(
  12. (config) => {
  13. // 在发送请求之前做些什么
  14. const userStore = useUserStore()
  15. if (userStore.token) {
  16. // console.log(config, userStore.token)
  17. config.headers.Authorization = userStore.token
  18. }
  19. return config
  20. },
  21. (error) => {
  22. // 对请求错误做些什么
  23. return Promise.reject(error)
  24. }
  25. )
  26. // 添加响应拦截器
  27. instance.interceptors.response.use(
  28. (response) => {
  29. // 对响应数据做点什么
  30. if (response.data.code === 0) {
  31. return response
  32. }
  33. ElMessage.warning(response.data.message || '服务异常')
  34. if (response.state === 401) {
  35. router.push('/login')
  36. }
  37. return Promise.reject(response.data)
  38. },
  39. (error) => {
  40. // 对响应错误做点什么
  41. ElMessage.error(error.message || '服务异常')
  42. return Promise.reject(error)
  43. }
  44. )
  45. export default instance
  46. export { baseURL }

vue配置拦截器

参考router api 导航守卫 | Vue Router

在路由配置文件中

  1. import { createRouter, createWebHistory } from 'vue-router'
  2. import { useUserStore } from '@/stores'
  3. const router = createRouter({
  4. history: createWebHistory(import.meta.env.BASE_URL),
  5. routes: [
  6. {
  7. path: '/login',
  8. component: () => import('@/views/login/Login.vue')
  9. },
  10. {
  11. path: '/',
  12. component: () => import('@/views/layout/LayoutContainer.vue'),
  13. redirect: '/article/manage',
  14. children: [
  15. {
  16. path: '/article/manage',
  17. component: () => import('@/views/article/ArticleManage.vue')
  18. },
  19. {
  20. path: '/article/channel',
  21. component: () => import('@/views/article/ArticleChannel.vue')
  22. },
  23. {
  24. path: '/user/profile',
  25. component: () => import('@/views/user/UserProfile.vue')
  26. },
  27. {
  28. path: '/user/password',
  29. component: () => import('@/views/user/UserPassword.vue')
  30. }
  31. ]
  32. }
  33. ]
  34. })
  35. // 配置拦截器
  36. // to:要去的地址, from:来的地址
  37. router.beforeEach((to) => {
  38. const userStore = useUserStore()
  39. if (!userStore.token && to.path !== '/login') {
  40. return '/login'
  41. }
  42. })
  43. export default router

form校验一直报红不能通过

先说结果,再看代码。

下面第一个是代码块是错误的,input中有值也会一直报红校验不过。

第二个代码块是正确的,报错原因是rules对象中属性值名必须和formData中属性值名一样。

  1. /*
  2. *错误的代码
  3. */
  4. // rules
  5. const myRules = ref({
  6. myName:[
  7. {required:true, message:'必填', trigger:'blur'}
  8. ]
  9. })
  10. // formData
  11. const formData = ref({
  12. name: null
  13. })
  14. <!-- element-plus -->
  15. <el-form
  16. :model="formData"
  17. :rules="myRules"
  18. >
  19. <el-form-item label="姓名" prop="myName">
  20. <el-input v-model="formData.name" />
  21. </el-form-item>
  22. </el-form>
  1. /**
  2. *正确的代码
  3. */
  4. // rules
  5. const myRules = ref({
  6. name:[
  7. {required:true, message:'必填', trigger:'blur'}
  8. ]
  9. })
  10. // formData
  11. const formData = ref({
  12. name: null
  13. })
  14. <!-- element-plus -->
  15. <el-form
  16. :model="formData"
  17. :rules="myRules"
  18. >
  19. <el-form-item label="姓名" prop="name">
  20. <el-input v-model="formData.name" />
  21. </el-form-item>
  22. </el-form>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/567651
推荐阅读
相关标签
  

闽ICP备14008679号