React:API url 在 GET 请求中有效,但在 POST 请求中被更改
React: API url works in GET request but it gets changed in POST request
我正在尝试为我的 React 应用程序设置 api 网址。 GET 端点工作完美,但是当我发出 post 请求时,URL 毫无理由地成为本地主机 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 被更改为本地主机。
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,
payload: res.data,
});
})
.catch((err) => {
dispatch(returnErrors(err.response.data, err.response.status));
dispatch({
type: LOGIN_FAILED,
});
});
};
这是我在控制台中得到的错误
VM159:1 POST http://localhost:3000/undefinedaccounts/api/auth/login 404 (Not Found)
如您所见,URL 已更改为本地主机,并且未定义的内容已传递给 URL,我不知道它来自何处。
如果有人知道这里发生了什么,我将不胜感激,谢谢。
解决此问题的最简单方法是设置 baseURL
:
或者作为 default config:
axios.defaults.baseURL = 'https://api.example.com';
或者,作为您的 axios 自定义的 baseURL instance:
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",
},
};
它只有“headers”,因此“url”就是undefined
。要修复它,您还应该在 config
object.
中添加“url” 属性
我正在尝试为我的 React 应用程序设置 api 网址。 GET 端点工作完美,但是当我发出 post 请求时,URL 毫无理由地成为本地主机 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 被更改为本地主机。
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,
payload: res.data,
});
})
.catch((err) => {
dispatch(returnErrors(err.response.data, err.response.status));
dispatch({
type: LOGIN_FAILED,
});
});
};
这是我在控制台中得到的错误
VM159:1 POST http://localhost:3000/undefinedaccounts/api/auth/login 404 (Not Found)
如您所见,URL 已更改为本地主机,并且未定义的内容已传递给 URL,我不知道它来自何处。
如果有人知道这里发生了什么,我将不胜感激,谢谢。
解决此问题的最简单方法是设置 baseURL
:
或者作为 default config:
axios.defaults.baseURL = 'https://api.example.com';
或者,作为您的 axios 自定义的 baseURL instance:
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",
},
};
它只有“headers”,因此“url”就是undefined
。要修复它,您还应该在 config
object.