我无法使用环境变量为axios提供baseUrl
我正在使用nuxt / vue / axios
我所拥有的大致是:
// axios.js
import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
axios.defaults.baseURL = process.env.BASE_URL
Vue.use(VueAxios, axios)
和
// index.vue (front page as it appears on the client)
populateFilters () {
Vue.axios.get('filters').then((response) => {
this.$store.commit('data/filters', response.data)
})
.catch((e) => {
console.error(e)
})
}
并在nuxt.config.js内部
// nuxt.config.js
build: {
extractCSS: true,
extend (config, ctx) {
// Run ESLint on save
const envLoad = require('dotenv').config()
if (envLoad.error){
throw result.error
}
}
},
console.log(process.env.BASE_URL)
在CMD中打印正确的连接字符串,但是,在chrome浏览器中,它输出“ undefined”,并且出现以下错误
GET http://localhost:3000/filters 404 (Not Found)
表示每当未设置axios的baseUrl时,axios(可能)默认为http://localhost:3000
。
我认为问题所在
nuxt加载的服务器/客户端对具有不同的上下文,或者服务器在加载环境变量之前加载了axios
我需要的
我必须能够:
nuxt.config.js
吗?)解决方案 请查看接受的答案
此外,安装nuxtjs / dotenv
npm install @nuxtjs/dotenv
并使您的nuxt.config.js
如下:
// nuxt.config.js
require('dotenv').config()
module.exports = {
modules: [
'@nuxtjs/dotenv',
'@nuxtjs/axios',
],
axios: {
baseURL: process.env.BASE_URL
},
}
请注意,require('dotenv').config()
必须位于顶部
答案 0 :(得分:1)
您可以使用一个nuxt axios模块。您可以在nuxt.config.js的模块sectiont中声明它,因此不需要文件axios.js。 https://github.com/nuxt-community/axios-module#usage
在此进行了描述通过将其加载到nuxt.config.js文件中的模块中,您的axios实例将与此组件兼容。$ axios在您的组件中。
您可以在nuxt.config.js中声明基本URL
modules: [
// Doc: https://github.com/nuxt-community/axios-module#usage
['@nuxtjs/axios', {
baseURL: 'http://jsonplaceholder.typicode.com'
}]
],
/*
** Axios module configuration
*/
axios: {
// See https://github.com/nuxt-community/axios-module#options
},
对于“其他环境变量”,您可以使用vuex存储使它们可用于所有组件。