Axios POST请求失败,错误状态代码为500:内部服务器错误

gxwragnw  于 2022-11-05  发布在  iOS
关注(0)|答案(6)|浏览(2877)

我尝试通过Axios在本地发送POST请求,并在正文中输入用户名和密码。
我正在http://127.0.0.1:5000/login上部署一个Flask应用程序,它处理/login路由。

POST http://127.0.0.1:5000/login 500 (INTERNAL SERVER ERROR)
Error: Request failed with status code 500
    at createError (createError.js:16)
    at settle (settle.js:18)
    at XMLHttpRequest.handleLoad (xhr.js:77)

我研究了一下,认为这可能是CORS的一个问题,但似乎不是这样,因为我尝试了一个Axios GET请求,它工作正常(响应记录正确)。

axios.get("http://127.0.0.1:5000").then(function(response) {
        console.log(response);
      }).catch(function(error) {
        console.log(error);
      })
axios.post("http://127.0.0.1:5000/login", {
        username: this.state.username,
        password: this.state.password
      }).then(function(response) {
        console.log(response);
      }).catch(function(error) {
        console.log(error);
      })

查看Chrome DevTools,我可以看到POST请求负载被正确填充。然后我尝试使用以下代码在Flask应用程序中打印服务器端的密钥,但我什么也没得到,为空。(这是预期的,因为POST请求失败)

dict = request.form
    for key in dict:
        print('form key '+dict[key])

然而,使用Postman和相应的键和值可以正常工作,并返回一个响应,打印出键(见上文)。失败来自哪里?为什么POST请求会失败,而GET似乎工作得很好?

lhcgjxsq

lhcgjxsq1#

2021年2月。在这上面浪费了2个小时。在互联网上对这个著名的图书馆没有太多帮助。

解决方案:

  • 在catch块中,error将始终为500 internal server error
  • 因此,请使用error.response.data而不是error
    代码:
try {
  let result = await axios.post(          // any call like get
    "http://localhost:3001/user",         // your URL
    {                                     // data if post, put
      some: "data",
    }
  );
  console.log(result.response.data);
} catch (error) {
  console.error(error.response.data);     // NOTE - use "error.response.data` (not "error")
}

更新日期:

我最后编写了一个处理错误的通用函数:
文件:common.app.js

export const errorUtils = {
  getError: (error) => {
    let e = error;
    if (error.response) {
      e = error.response.data;                   // data, status, headers
      if (error.response.data && error.response.data.error) {
        e = error.response.data.error;           // my app specific keys override
      }
    } else if (error.message) {
      e = error.message;
    } else {
      e = "Unknown error occured";
    }
    return e;
  },
};

更多信息:https://github.com/axios/axios#handling-errors

hrirmatl

hrirmatl2#

所以我也陷入了同样的问题,我找到的解决方案是这样的:

let data = JSON.stringify({
  username: this.state.username,
  password: password
});

const response = axios.post(url,data,{headers:{"Content-Type" : "application/json"}});

这个解决方案对我很有效。

9cbw7uwe

9cbw7uwe3#

显然Axios并不喜欢原始的JSON对象

{username: this.state.username, password: password}

但将数据传递到FormData对象中似乎可以正常工作!

gcuhipw9

gcuhipw94#

在工作了2个小时后,我意识到我在主体和数据上犯了一个错误。所以,在axios中确保你像这样传递数据。

async function loadToken(){
  try{
    response = await axios({
      url: ``, 
      headers: {
        'Authorization': '',
        'Content-Type': '',
      },
      data: '',
      method: 'POST'
    });
    let data = response.data;
    return {
      tokenInfo:data,
      timestamp:new Date().getTime()
    }
  } catch(err) {
    console.log("err->", err.response.data)
    return res.status(500).send({ret_code: ReturnCodes.SOMETHING_WENT_WRONG});
  } 
}

我以前的代码是这样传递数据的,这是错误的

async function refreshToken(){
  try{
      let headers = {
        authorization: '',
        'Content-Type': ''
      }
      let url =  ``
      let body = {
        grant_type: '',
        refresh_token: global.tokenInfo.refresh_token
      }
      data = await axios.post(url, body, {headers});
      let data = response.data
      console.log(data)
      return {
        tokenInfo:data,
        timestamp:new Date().getTime()
      }
  } catch(err) {
      console.log("err->", err.response)
      return res.status(500).send({ret_code: ReturnCodes.SOMETHING_WENT_WRONG});
  }
}

简单地尝试我的第一个代码,希望能解决你的问题.

z9ju0rcb

z9ju0rcb5#

大多数情况下,发生这种情况是因为使用了错误的内容类型头
打开postman,看到“正文”标签。在那里你可以找到你的帖子数据的内容类型。它也可以从“标题”标签访问。应该有一个Content-Type标题。你通过POST请求发送的data的正确格式取决于Content-Type标题。例如,json内容类型需要json(javascript对象)数据或表单数据内容类型需要FormData。
要在axios中设置头文件,请将代码更改为:

axios.post("http://127.0.0.1:5000/login", {
        username: this.state.username,
        password: this.state.password
      }, {
        headers: {'Content-Type': 'application/json'}
      }).then(function(response) {
        console.log(response);
      }).catch(function(error) {
        console.log(error);
      })
yzxexxkh

yzxexxkh6#

我有类似的错误,我有JSON大写,它应该是小写的

相关问题