reactjs - 无法在 axios post 方法中替换 process.env.hostname
问题描述
我是 UI/react 的新手,并在我的项目中配置 .env 文件。由于时间有限,我尝试通过 read.md 的 react 其中提到了添加自定义环境变量的部分。那里提到了环境变量是在构建时嵌入的。因此,我根据链接进行了更改,以便不需要构建并且可以在运行时读取值。
在 react 项目的 action.js 文件中,我正在尝试如下发布请求。Console.log 正在打印正确的值,但在发布请求中,URL 没有被替换。
export function createIdea(idea) {
return function (dispatch){
return axios.post('http://${process.env.REACT_APP_HOSTNAME}:${process.env.REACT_APP_PORT}/users/user',JSON.stringify(user),config).then(response => {
// dispatch
console.log('success')
dispatch({
type: CREATE_SUCCESSFUL,
payload:response.data
})
}).catch(response=>{
// dispatch
console.log(process.env.REACT_APP_HOSTNAME);
console.log(response)
dispatch({
type: CREATE_FAILED,
payload:response
})
})
}
}
在 webpack.config.dev.js 中,进行更改以在运行时读取配置。从此stackoverflow 链接中获取参考 webpack.config.dev.js 中的更改如下:在文件顶部,添加
var dotenv = require('dotenv').config({path: '../.env'});
内部插件部分,添加
new webpack.DefinePlugin({
"process.env": dotenv.parsed
}),
我保存在根位置的 .env 文件如下所示:
REACT_APP_HOSTNAME=localhost
REACT_APP_PORT=8080
如果遗漏任何配置或我误解了任何内容或需要在 axios 上完成其他操作,请提供一些指示
解决方案
创建一个 axios 配置文件,这样您就不必一遍又一遍地重复 URL:
import axios from "axios";
const api = axios.create({
baseURL: process.env.REACT_APP_BASE_URL // or process.env.BASE_URL if not using CRA
});
export default api;
现在您将为 AJAX 请求导入此配置:
import api from '../path/to/utils/axiosConfig.js';
如果您使用create-react-app,则react-scripts
允许您自动使用.env
文件。请参阅create-react-app 文档。
工作 CRA 示例:
但是,如果您像我一样,并且使用自定义 webpack 配置,那么这里有一个工作示例:custom-webpack-envs
要运行上面的示例...
在桌面上打开一个终端。
克隆回购:
git clone git@github.com:mattcarlotta/custom-webpack-envs.git
更改目录:
cd custom-webpack-envs
安装依赖项:
yarn install
运行服务器:
yarn dev
推荐阅读
- kotlin - 如何使用 Plotly Kotlin 生成 HTML 文件
- bash - 编写 shell 脚本以在目录中的多个文件上运行 Rscript
- python-3.x - 如何从 Python 中的 HTML 表格列中提取数据
- sql - PostgreSQL - 获取所有具有最小值最大值的行
- mysql - mysql 在插入带参数的值时出错
- c# - 如何在 C++ 和 C# 中跟踪函数的进度
- json - 使用“十一缓存资产”时无法遍历数组
- mysql - NodeJS Seqeulize 一对一关系在数据库级别不真实?
- r - 在 R 中使用字符串作为参数
- node.js - 我需要使用 mailgun 处理传入的邮件,这不起作用