如何解决反应: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 举报,一经查实,本站将立刻删除。