未在axios请求中发送主体数据

Azi*_*ima 4 javascript node.js reactjs axios

我正在尝试通过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);
})
Run Code Online (Sandbox Code Playgroud)

这是一个后端:

app.get('/next/api', verifyToken, function(req, res) {
console.log(req.body);
Run Code Online (Sandbox Code Playgroud)

})

但是我的{}身体变得空虚。我正在获取标头和其他数据,但没有数据。

Mai*_*rix 9

看起来你只剩下两点让它工作了:

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

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

在后端不要忘记使用某种身体解析器实用程序包,例如: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 */
Run Code Online (Sandbox Code Playgroud)


pid*_*zle 5

GET请求不应包含主体。

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

像这样:

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

})
Run Code Online (Sandbox Code Playgroud)

并更改您的api以期待发布

app.post('/next/api', verifyToken, function(req, res) {
console.log(req.body);
});
Run Code Online (Sandbox Code Playgroud)

要么

data属性更改为params

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

})
Run Code Online (Sandbox Code Playgroud)

并更改api以注销参数

app.get('/next/api', verifyToken, function(req, res) {
console.log(req.params);
});
Run Code Online (Sandbox Code Playgroud)

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

  • GET 正文不再被从 HTTP 请求中排除,并且建议将其更改为 POST 对我们这些使用我们无法控制的外部 API 的人没有帮助。 (7认同)
  • @user37309 虽然它们可能不再被_“驱逐”_,但浏览器根本不支持它们。 (3认同)
  • 也许吧,但这更多取决于现在的看法。由于现在的标准不再明确排除 GET 主体,我想说“不应该”是一个非常个人的观点。当您搜索有关 HTTP GET 主体的答案时,这个答案也会出现在 Google 中,因此从这个意义上来说,它是相当无用的。 (2认同)