NodeJS axios请求中未发送正文数据

gojuced7  于 2023-03-01  发布在  Node.js
关注(0)|答案(5)|浏览(166)

我试图通过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);

})
但是我得到的是{}空的主体。我得到的是标头和其他数据,而不是数据。

oknwwptz

oknwwptz1#

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说的,确保你的头包含你要发送的内容类型。

mkshixfv

mkshixfv2#

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

  • 第一:http方法应该设置为POST而不是GET,因为你想发送一些东西。
  • 第二:然后您可以添加HTTP报头(就像您对授权报头所做的那样)Content-Type:'应用程序/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 */
v6ylcynt

v6ylcynt3#

如果您收到“bodyParser is deprecated”的错误,请尝试以下操作-

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

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

hkmswyz6

hkmswyz64#

因为get请求...通常没有主体,它们基本上就是你在url栏中输入的内容,所以你应该使用参数而不是主体,如果你想单独使用它们,你可以使用querystring。
url/posts?post=post123&comment=comment321
在下文中,向url/posts/post 123/comment 321 =〉发出的请求将填充以下两个参数。
你必须使用post但注解是不必要的.

router.get("/posts/:post/:comment",async(req,res){
    const postPermlink = req.params.post
    const commentPermlink = req.params.comment ?? null
    const postDbEntry = await Posts.findOne({permLink: postPermlink})
}
esyap4oy

esyap4oy5#

试试这个

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

相关问题