当前位置: 首页 > 知识库问答 >
问题:

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

富昕
2023-03-14

我正试图通过Axios在本地发送一个POST请求,其中包含用户名和密码。

我正在部署一个Flask应用程序http://127.0.0.1:5000/login,它处理/login路由。POST请求失败,出现以下错误

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);
      })

查看ChromeDevTools,我可以看到POST请求有效负载已正确填充。然后,我尝试使用以下代码在Flask应用程序的服务器端打印密钥,但我一无所获,是空的。(

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

但是,使用带有相应键和值的Postman可以正常工作,并返回响应并打印出键(参见上文)。失败从何而来?GET似乎工作正常,为什么POST请求会失败?

共有3个答案

何博涛
2023-03-14

显然Axios不喜欢原始JSON对象

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

但是将数据传递到FormData对象似乎工作得很好!

阮俊弼
2023-03-14

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

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

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

这个解决方案对我有效。

宋望
2023-03-14

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

解决方案:

  • 在捕获块中,错误将始终是500内部服务器错误
  • 所以,用error.response.data代替false.

代码:

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")
}

更新:

我最终编写了一个处理错误的通用函数:

文件:通用。应用程序。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-错误

 类似资料:
  • 我已经被这个问题困扰了好几个小时,检查了几十个示例/StackOverflow答案,但我仍然得到同样的错误。这是我第一次使用AJAX,但我对Laravel有丰富的经验。 我遇到的问题是,在尝试发送AJAX请求时出现500个内部服务器错误,其目的是更新数据库中的一行。 我已经读到这个错误可能是由CSRF令牌没有被验证/传递到后端引起的,但是尽管改变了我的代码,我仍然得到同样的问题。 这是我的代码:

  • 这是我从mysql数据库中删除数据的代码,我得到了这个错误。 在我选择名称并尝试提交后...它给我这个错误 HTTP状态500-内部服务器错误 类型异常报告 Message内部服务器错误 描述服务器遇到内部错误,无法满足此请求。 例外 组织。阿帕奇。贾斯珀。JaspereException:java。lang.NumberFormatException:空根本原因 JAVAlang.NumberF

  • 当我尝试使用JSP运行我的Web应用程序(基本CRUD)时,GlassFish服务器返回以下消息: HTTP状态500-内部服务器错误 类型异常报告 消息内部服务器错误 说明服务器遇到内部错误,无法满足此请求。 例外 java.lang.NullPointerException 注意GlassFish Server Open Source Edition 4.1日志中提供了异常及其根本原因的完整堆

  • 下面是我的一部分。jsp。 下面是我的错误: HTTP状态500–内部服务器错误 类型异常报告 消息在行[20]处处理[/home.jsp]时发生异常 说明服务器遇到意外情况,无法满足请求。 例外组织。阿帕奇。贾斯珀。JasperException:在第[20]行处理[/home.jsp]时发生异常 17:这是添加信息页 18: Stacktrace:org。阿帕奇。贾斯珀。servlet。Jsp

  • 当我尝试使用JSP运行我的Web应用程序时,GlassFish服务器返回以下消息: 我不知道该怎么办。我认为这个错误与找不到javax有关。servlet。jsp。jstl。glassfish服务器中的jar库

  • 我想知道这是否与Eclipse安装到权限有关,或者可能与项目结构有关?有人有线索吗?也许我应该寻找一个容器映像或其他东西来尝试在其上构建?多谢了。