axios请求中未发送正文数据

Posted

技术标签:

【中文标题】axios请求中未发送正文数据【英文标题】:body data not sent in axios request 【发布时间】:2019-03-04 19:02:20 【问题描述】:

我正在尝试通过 axios 请求将数据发送到我的后端脚本,但正文看起来是空的。

这是前端发送的请求:

axios.request(
  method: 'GET',
  url: `http://localhost:4444/next/api`,
  headers: 
    'Authorization': token
  ,
  data: 
    next_swastik: 'lets add something here'
  ,

).then((res)=>  
  console.log("api call sucessfull",res);

).catch((err)=>
  console.log("api call unsucessfull",err);

  this.props.toggleLoading(false);
)

这是一个后端:

app.get('/next/api', verifyToken, function(req, res) 
console.log(req.body);

)

但是我得到了 空的身体。我得到的是标题和其他数据,但不是数据。

【问题讨论】:

如果您确定您是通过 POST 发出请求,那么您的问题可能是 bodyParser。请确保您的 express 实例正在使用它。 【参考方案1】:

GET 请求不应有正文。

将方法从“GET”更改为“POST”

像这样:

axios.request(
  method: 'POST',
  url: `http://localhost:4444/next/api`,
  headers: 
    'Authorization': token
  ,
  data: 
    next_swastik: 'lets add something here'
  ,

)

并更改您的 api 以期待一个帖子

app.post('/next/api', verifyToken, function(req, res) 
console.log(req.body);
);

data 属性更改为params

axios.request(
  method: 'GET',
  url: `http://localhost:4444/next/api`,
  headers: 
    'Authorization': token
  ,
  params: 
    next_swastik: 'lets add something here'
  ,

)

并更改 api 以注销参数

app.get('/next/api', verifyToken, function(req, res) 
console.log(req.params);
);

就像@MaieonBrix 所说,确保您的标头包含您要发送的内容类型。

【讨论】:

GET 正文不再从 HTTP 请求中排除,建议将其更改为 POST 对我们这些使用我们无法控制的外部 API 的人没有帮助。 我的答案不是针对那些使用他们无法控制的外部 API 的人,而是针对您在上面看到的问题。我还说你“不应该”有一个 GET 不是你“不能” 也许,但现在更多的是取决于意见。由于标准现在不再明确排除 GET 机构,我会说“不应该”是一个非常个人的观点。当您搜索有关 HTTP GET 正文的答案时,此答案也会出现在 Google 中,因此从这个意义上说,它相当无用。【参考方案2】:

看起来你只剩下两点可以让它发挥作用了:

一:http方法应该设置为POST而不是GET,因为你想发送一些东西。

二:然后您可以添加 http 标头(就像您对授权标头所做的那样)Content-Type: 'application/json`

在后端不要忘记使用某种 body parser 实用程序包,例如:body-parser 并使用您的应用进行设置。

我想你的服务器正在使用 express,下面是你将如何使用 express:

const express = require('express');
const app = express();
const bodyParser = require('body-parser')
const jsonParser = bodyParser.json();

app.use(jsonParser); // use it globally
app.get('your_route', jsonParser, otherMiddleware, (req, res) => ...); // use it for specific routes

/* ... rest of your code */

【讨论】:

【参考方案3】:

如果您收到“bodyParser is deprecated”的错误,试试这个 -

app.use(express.json()); //To parse JSON bodies (Applicable for Express 4.16+)

如果您想从 HTTP 请求的正文中获取数据,请使用“post”方法。

【讨论】:

简单有效!!我没有收到“bodyparser deprecated”错误。但这对我有用。【参考方案4】:

试试这个

this.axios('realties',  params: this.filter )

【讨论】:

以上是关于axios请求中未发送正文数据的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Axios 中发送带有 JSON 正文的 get 请求?

Axios DELETE 请求正文被发送为空

在 AXIOS 中为 GET 方法发送请求正文会引发错误

如何使用 Axios 库发送 XML 数据

带有 json 数据的 axios 发布请求

尝试在 Axios GET 的正文中发送数据以在 Django 后端使用,但 request.body 的打印为空