微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

反应:API url 在 GET 请求中有效,但在 POST 请求中被更改 您的代码中的问题:

如何解决反应:API url 在 GET 请求中有效,但在 POST 请求中被更改 您的代码中的问题:

我正在尝试为我的 react 应用设置 api url。 GET 端点工作正常,但是当我发出 post 请求时,URL 毫无理由地变成了 localhost URL。

我正在使用 Constants.js 文件,在其中检查节点环境是在开发中还是在生产中。这就是他们在生产中的样子。

const dev = {
  url: "http://127.0.0.1:8000/",};

const prod = {
  url: "https://myapp.herokuapp.com/",};

console.log(process.env.NODE_ENV);

export const config = process.env.NODE_ENV === "development" ? dev : prod;

目前我将它们倒置,以便我可以向 heroku 上的服务器发出请求。

const prod = {
  url: "http://127.0.0.1:8000/",};

const dev = {
  url: "https://myapp.herokuapp.com/",};

console.log(process.env.NODE_ENV);

export const config = process.env.NODE_ENV === "development" ? dev : prod;

在这里,我正在导入配置并使用变量发出 GET 请求,效果非常好。

export const loadUser = () => (dispatch,getState) => {
  dispatch({ type: USER_LOADING });

  axios
    .get(`${config.url}accounts/api/auth/user`,tokenConfig(getState))
    .then((res) => {
      dispatch({
        type: USER_LOADED,payload: res.data,});
    })
    .catch((err) => {
      dispatch(returnErrors(err.response.data,err.response.status));
      dispatch({
        type: AUTH_ERROR,});
    });
};

这就是奇怪的地方。当我发出 POST 请求时,URL 会更改为 localhost。

export const login = (username,password) => (dispatch) => {
  const config = {
    headers: {
      "Content-Type": "application/json",},};

  const body = JSON.stringify({
    username,password,});

  axios
    .post(`${config.url}accounts/api/auth/login`,body,config)
    .then((res) => {
      dispatch({
        type: LOGIN_SUCCESS,err.response.status));
      dispatch({
        type: LOGIN_Failed,});
    });
};

这是我在控制台中得到的错误

VM159:1 POST http://localhost:3000/undefinedaccounts/api/auth/login 404 (Not Found)

如您所见,URL 已更改为 localhost,并且未定义的信息被传递给了我不知道它来自何处的 URL。

如果有人知道这里发生了什么,我将非常感谢您的帮助,谢谢。

解决方法

解决此问题的最简单方法是设置 baseURL

作为 default config

axios.defaults.baseURL = 'https://api.example.com';

或者,作为您的 axios 自定义 instance 的 baseURL:

const instance = axios.create({
  baseURL: 'https://api.example.com'
});

您的代码中的问题:

当你写道:

axios.post(`${config.url}accounts/api/auth/login`,body,config)...

其中 config 是:

const config = {
    headers: {
      "Content-Type": "application/json",},};

并且它只有“标题”,因此“url”只是undefined。要修复它,您还应该在 config 对象中添加“url”属性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?