Axios POST参数在服务器上显示为空-使用MERN堆栈

时间:2018-09-25 17:37:22

标签: javascript node.js axios

我想在Mongo中更新文档,但是当我向服务器发送带有更新参数的Axios POST请求到服务器时,除了服务器端的空白对象外,我什么都没收到-我将Node.js与Express结合使用服务器(MERN堆栈)。

我尝试了qs库模块和Node的querystring模块。我尝试包括标头   'Content-Type': 'application/x-www-form-urlencoded''application/json'

我的Axios POST请求:

const A = 1;
const B = 2;
const data = { A, B };
console.log(qs.stringify(data));                 // A=1&B=2
axios.post(url('upVote'), qs.stringify(data));

服务器路由:

app.post('/upVote', async (req, res) => {
  console.log(req.params);                       // {}
  await DB.updateVote(ID, collection, voteCount);
  res.end();
});

headers as shown by Chrome's DevTools

...而且,我所有的axios.get()请求都可以正常工作,并且可以从Mongo抓取数据并将其正确发送回我的应用程序,并且网址/端点匹配。

3 个答案:

答案 0 :(得分:0)

我认为您希望使用.body而不是.params。因为您正在使用axios通过邮递方式发送数据。您正在打印参数,但不会为此url / api打印任何内容。
尝试

console.log(req.body) // instead of req.params 

如果这不起作用,请向我们显示您的反应代码。
此外 为了做出反应,您必须在axios之后添加.then(),否则它将说出未兑现的承诺


要在服务器端获取参数,您必须进行一些更改
在axios中(反应

axios.post(url('upVote/param'), qs.stringify(data));


服务器

app.post('/upVote/:params', async (req, res) => {
 console.log(req.params)
 .....
})

答案 1 :(得分:0)

有几种方法可以使用axios将数据发送到服务器。 我在axios中看到了与documentation的混淆,我以前从未见过这种用法,而且在查看请求日志和对象时,它似乎已被打破。

1)axios.post接收请求的正文作为第二个参数。因此,如果要将参数传递给axios,则应执行以下操作:

const B = 2;
const data = { A: 1, B: 1 };

axios.post(url('upVote'), {}, { params: data });

请注意,axios将自行处理字符串化,并且第三个参数是config object

在服务器上,这些参数将在request.query上可用

2)如果您想自己对参数进行字符串化,则应像这样将其附加到您的URL中

axios.post(`url('upVote')?${qs.stringify(data)}`);

与此处相同,服务器上的数据将位于request.query

3)为了方便起见,通常最好使用post请求的主体来传输大型数据有效负载。您还应该考虑什么是缓存策略,并且如果它们依靠请求url而不考虑请求正文,那么这可能是一个问题。

axios.post(url('upVote'), data);

在这种情况下,服务器上的数据将位于request.body

UPD:最初忘记提及您将需要一个body-parser中间件才能访问request.body

4)您可以使用没有方法速记的axios,这对某些人可能有用

axios({
  method: 'POST',
  url: url('upVote'),
  params: data
})

这与1中的示例相同。
所有这些都返回一个Promise,您可以.then().catch()await

答案 2 :(得分:0)

我认为您正在致电res.end()。我认为应该是res.send(...)

此答案应该会有所帮助:https://stackoverflow.com/a/29555444/1971378