nuxt.js项目中axios的配置应该怎么写?
我将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 => {
})
}
}
保存后刷新页面报错:
这是为什么呢?我在mounted中请求是没有问题的
还有一个问题是,在axios.js中我想根据hostname来配置axios的baseURL,但是读不到hostname?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你的
plugin/axios.js
没有location这个变量。要么你在
.vue
文件的created/mounted里读取location,要么直接把hostname写在dev.config.js
和prod.config.js
,按开发/生产环境区分。分清出你的代码是在nodejs还是在浏览器运行的。
顺便,简单测试的报错如下(打开
localhost:3000/test
页面显示的内容):