Axios POST params在服务器上显示为空
我想在Mongo中更新文档,但是当我向服务器发送Axios POST请求时,我只收到服务器端的空白对象 - 我正在使用带有Express服务器的Node.js(MERN)堆)。
我试过了qazxsw poi库模块和Node qazxsw poi模块。我尝试用qs
和querystring
包含标题。
我的Axios POST请求:
'Content-Type': 'application/x-www-form-urlencoded'
服务器路由:
'application/json'
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();
});
请求工作正常并从Mongo获取数据并将其正确发送回我的应用程序,并且url / endpoints匹配。
有几种方法可以使用axios将数据发送到服务器。我在axios中看到了与headers as shown by Chrome's DevTools的混淆,我之前没有看到过这种用法,看起来它确实在查看请求日志和对象时被打破了。
1)axios.get()
接收请求的主体作为第二个参数。因此,如果您想将参数传递给axios,您应该执行以下操作:
documentation
注意axios会自己处理字符串化,第三个参数是axios.post
。
在服务器上,params将在const B = 2;
const data = { A: 1, B: 1 };
axios.post(url('upVote'), {}, { params: data });
上提供
2)如果你想自己对参数进行字符串化,那么你应该像这样将它们附加到你的URL中
config object
同样,服务器上的数据将在request.query
下
3)为方便起见,通常最好使用post请求的主体来传输大数据有效负载。您还应该考虑您的缓存策略是什么,如果它们依赖于请求URL而不考虑请求体,则可能是一个问题。
axios.post(`url('upVote')?${qs.stringify(data)}`);
在这种情况下,服务器上的数据将在request.query
下
UPD:最初忘了提到你需要一个axios.post(url('upVote'), data);
中间件来访问request.body
。
4)您可以使用没有方法缩写的axios,这可能对某些人有用
body-parser
这与1中的示例相同。
所有这些都返回了一个Promise,你可以request.body
或axios({
method: 'POST',
url: url('upVote'),
params: data
})
。