nuxt.js项目中axios的配置应该怎么写?

发布于 2022-09-07 08:01:24 字数 1576 浏览 18 评论 0

我将axios的配置文件放在plugins/axios.js中,代码如下:

import axios from 'axios'
import qs from 'qs'

const hotName = location.hostname
if (hotName === 'localhost') {
  axios.defaults.baseURL = `//xxxx.com/api`
  axios.defaults.withCredentials = true
} else {
  axios.defaults.baseURL = `//${hotName}/api`
  axios.defaults.withCredentials = true
}
axios.defaults.baseURL = `//ask.hishixi.com/api`
axios.defaults.withCredentials = true
// POST传参序列化
axios.interceptors.request.use((config) => {
 if (config.method === 'post') {
  config.data = qs.stringify(config.data)
 }
 return config
}, (error) => {
 return Promise.reject(error)
})

// 返回状态判断
axios.interceptors.response.use(function (res) {
  return res.data
}, function (error) {
  return Promise.reject(error)
})
  

export function fetch (url, params) {
 return new Promise((resolve, reject) => {
  axios.post(url, params)
   .then(res => {
    resolve(res.data)
   })
   .catch((error) => {
    reject(error)
   })
 })
}
export default {
 // 获取导航信息
 getHeaderList () {
    return axios.get('/Index/headerUrl')
 }
}

页面中使用:

import axios from '../plugins/axios'

export default {
  asyncData ({}) {
    return axios.getHeaderList().then(res => {

    })
  }
}

保存后刷新页面报错:

clipboard.png

clipboard.png

这是为什么呢?我在mounted中请求是没有问题的
还有一个问题是,在axios.js中我想根据hostname来配置axios的baseURL,但是读不到hostname?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我家小可爱 2022-09-14 08:01:24

你的plugin/axios.js没有location这个变量。
要么你在.vue文件的created/mounted里读取location,要么直接把hostname写在dev.config.jsprod.config.js,按开发/生产环境区分。
分清出你的代码是在nodejs还是在浏览器运行的。
顺便,简单测试的报错如下(打开localhost:3000/test页面显示的内容):
图片描述

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文