??????712 2024-09-19 10:11 采纳率: 50%
浏览 5
已结题

前端访问不了后端数据

在下刚入行,利用vue和node.js简单写了个前后端联动搜索的小网站,在本地测试的时候前端各项内容均可访问后端接口和数据库,各项功能完整,但是当我将代码放在服务器后,将前端地址改为我对外映射的ip(114.x.x.x:8080)后发现,外网利用该地址进入只能访问首页(登录页面,如下图),在开发者工具里面的网络里显示和后端没有建立连接,我尝试过将前端vite.confiig.js文件中的server:host修改为0.0.0.0,然后在后端的app.js路由里面监听0.0.0.0的内容,但在前端还是无法访问后端数据

img


(这是配置的图片,admin是前端的配置,api-dzj是后端的配置)

img

(这是访问的页面)

img


(这是后端app.js代码)

下面是我写的前端axios封装

import axios from 'axios'
import { ElMessage, ElMessageBox } from 'element-plus'
import { useAuthStore } from '@/stores/auth'
 
// 创建axios实例
const service = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  timeout: 5000
})
 
// request拦截器
service.interceptors.request.use(
  (config) => {
    // do something 在发送请求前
    const authStore = useAuthStore()
    if (authStore.token) {
      // 让每个请求携带token
      // ["X-Token"]为自定义key
      // 请根据实际情况自行修改
      config.headers['token'] = authStore.token
    }
    return config
  },
  (error) => {
    // do something 当请求错误
    console.log(error) // for debug
    return Promise.reject(error)
  }
)
 
// respone拦截器
service.interceptors.response.use(
  /**
   * 如果你想获取 http 信息,例如 headers 或 status
   * 请 return  response => response
   */
 
  /**
   * 下面的注释为通过response自定义code来标示请求状态,当code返回如下情况为权限有问题,登出并返回到登录页
   * 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中
   */
  (response) => {
    return response.data
  },
  (error) => {
    const { status, data } = error.response
 
    let message
 
    // 验证错误
    const info = data.errors.map(item => `<li>${ item }</li>`)
    message = `<ul>${ info.join('') }</ul>`
 
    // 401 错误,Token 值错误,需要重新登录
    const authStore = useAuthStore()
    if (status === 401 && authStore.token) {
      message = '登录信息错误'
 
      // 重新登录
      ElMessageBox.confirm(
        '你已被登出,可以取消继续留在该页面,或者重新登录',
        '确定登出',
        {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }
      ).then(async () => {
        await authStore.resetToken()
        location.href = '/login'
      })
    }
 
    ElMessage({
      message: message,
      type: 'error',
      dangerouslyUseHTMLString: true,
      duration: 3 * 1000
    })
    return Promise.reject(error)
  }
)
 
export default service
 
 

  • 写回答

1条回答 默认 最新

  • caperxi 2024-09-19 15:09
    关注

    可以尝试打包成hash路由,就不用额外配置路由了。
    如有帮助,请采纳!!!

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月21日
  • 修改了问题 9月21日
  • 修改了问题 9月20日
  • 创建了问题 9月19日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?