【发布时间】:2019-09-06 16:15:09
【问题描述】:
我无法使用环境变量为 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 网络浏览器中它输出“未定义”,我收到以下错误
GET http://localhost:3000/filters 404 (Not Found)
意味着当 axios 的 baseUrl 尚未设置时,axios(可能)默认为 http://localhost:3000。
我认为问题是什么
nuxt加载的服务端/客户端对有不同的上下文或者是服务端在加载环境变量之前加载了axios
我需要什么
我需要能够:
- 创建包含(除其他外)BASE_URL 的 .env 文件
- 在代码中的某处定义这些环境变量 (
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()必须在顶部
【问题讨论】:
-
这正是我一直在做的事情
标签: vue.js environment-variables axios nuxt.js