如何将表单数据从 React 发送到 Node JS 后端服务器

Posted

技术标签:

【中文标题】如何将表单数据从 React 发送到 Node JS 后端服务器【英文标题】:How to send form data from React to the Node JS back end server 【发布时间】:2021-05-01 20:42:37 【问题描述】:

我正在尝试将 FormData 从 React JS 发送到后端(快速节点服务器),如下所示。

我看到req.body.myFormData (expressTest.js) 的值为空。 我也尝试了这篇文章的建议,但没有运气。任何帮助表示赞赏。

how do i send FormData to the node server from React js axios post request?

reactTest.js 模块

myFormData = new FormData();
myFormData.append("userName","TestUser")
myFormData.append("files", file) // input type file
export const sendDocument = async (myFormData) => 
  return await axios(
    method: 'post',
    url: `/sendDocument`,
    data: myFormData,
    headers:  'Content-Type': 'multipart/form-data' 
  );
;

expressTest.js

const express = require('express')
const axios = require('axios')
const router = express.Router()

router.post('/', (req, res) => 
  console.log(req.body.myFormData) //giving undefined //tried req.myFormData too
  console.log(JSON.parse(req.body.myFormData.userName))
  axios(
    method: 'post',
    url: '/sendMyUserData',
    data: req.body.myFormData,
    headers: 
      apiKey: 'keytoapi',
      'Content-Type': 'multipart/form-data'
    
  )
    .then(response => 
      
      return res.send(res)
    )
    .catch(error => 
      console.error('error')
     

添加@con-fused 和@Kidas 推荐的multer 后,我可以在Express 路由器中读取FormData。

下面是输出。

console.log(req.body)

[Object: null prototype] 
  files: '[object File]',
  userName: 'TestUser'

现在我需要将它发送到我的后端 Java 端点——我发送的正文是否正确?它没有达到我的终点

@PostMapping(path = "/sendMyUserData", consumes =  MediaType.MULTIPART_FORM_DATA_VALUE )
        public String uploadMyUserData(@RequestPart(value = "files") final MultipartFile[] multipartFiles, @RequestPart(value = "userName", required = true) String userName ) 
            return myService.storeFiles(multipartFiles, userName));
    

【问题讨论】:

你试过console.log(req.body),看看你得到了什么? 是的,它打印的是空的 不。我试过那些。我也试过JSON.Stringify,如果不知道请不要标记为重复 【参考方案1】:

你需要 multer 来获取 multipart/form-data。

npm i multer

formdataParser = require('multer')().fields([])
app.use(formdataParser)
 

根据

更新

https://github.com/expressjs/body-parser/issues/88#issuecomment-173644716评论

【讨论】:

是的,我的配置中已经有这两个 app.use(bodyParser.json()) app.use(bodyParser.urlencoded( extended: true )); 看起来是 expressJs 的问题。尝试使用此帮助:github.com/expressjs/body-parser/issues/… 谢谢,@con-fused,它现在可以工作了。我刚刚更新了帖子。我正在尝试查看如何将带有元数据的文件发送到后端 我将您的答案标记为正确,但它并没有解决我在新问题中发布的实际问题。你能帮我看看吗。***.com/questions/65941537/…

以上是关于如何将表单数据从 React 发送到 Node JS 后端服务器的主要内容,如果未能解决你的问题,请参考以下文章

无法将多部分表单数据从 React 正确发送到 Express Js

如何将 CSV 从 React 应用程序发送到 Node.js 服务器?

在 React(客户端)中上传 .json 文件并将其发送到 Node(服务器端)

将数据从服务器(Node.js)发送到 GraphQL 服务器中的客户端(React 组件)

如何通过 ajax 调用将 html 表单数据发送到 node.js 服务器?

如何使用 Node.js 将 JSON 数据从 Node.js 发送和获取到 HTML