React+Express表单提交后req.body为空,求助解决方法
嘿,我帮你找出两个关键问题啦,解决这两个点应该就能搞定req.body为空的问题:
问题1:textarea缺少name属性
表单提交的字段必须要有name属性,后端才能通过这个名称识别并提取对应的值。你现在的textarea只设置了defaultValue,但没有name,所以后端接收不到任何表单数据。
修改你的前端textarea代码,加上name属性(比如命名为queryData):
<textarea name="queryData" defaultValue={JSON.stringify({ collection, fieldSets, responseType: 'csv' })} />
问题2:表单提交路径和后端路由不匹配
你前端表单的action是/api/query,但后端的POST路由写的是/query,这就导致表单提交的请求根本没走到你写的那个处理函数里,自然拿不到req.body。
把后端的路由改成和前端匹配的/api/query:
app.post('/api/query', (req, res) => { console.log('reqbody is...', req.body); // 后续处理逻辑 });
额外优化建议
如果你的表单没有涉及文件上传,用upload.none()替代upload.array()会更合适,它专门处理不带文件的multipart/form-data请求:
app.use(upload.none());
完成以上修改后,你就能在后端拿到req.body.queryData,里面是你序列化后的JSON字符串,再用JSON.parse(req.body.queryData)转成对象就可以正常处理啦!
内容的提问来源于stack exchange,提问作者Kayote
相关产品推荐
相关产品推荐

