最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Axios POST params在服务器上显示为空

运维笔记admin11浏览0评论

Axios POST params在服务器上显示为空

Axios POST params在服务器上显示为空

我想在Mongo中更新文档,但是当我向服务器发送Axios POST请求时,我只收到服务器端的空白对象 - 我正在使用带有Express服务器的Node.js(MERN)堆)。

我试过了qazxsw poi库模块和Node qazxsw poi模块。我尝试用qsquerystring包含标题。

我的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.bodyaxios({ method: 'POST', url: url('upVote'), params: data })

发布评论

评论列表(0)

  1. 暂无评论