【问题标题】:How to handle FormData from express 4如何处理来自 express 4 的 FormData
【发布时间】:2021-08-17 01:56:01
【问题描述】:

我尝试将一些表单数据发送到我的节点服务器,但req.body 在节点端没有我的表单字段

 var express = require('express')
var app = express()
var path = require('path')
var bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({
  extended: true
}));

app.get('/', function (req, res) {
  res.sendFile('index.html')
})
app.post('/sendmail', function (req, res) {

  const formData = req.body.formData

这是我从浏览器发送的内容

fetch('/send', {
  method: 'POST',
  body: new FormData(form)
})

在开发工具中我只看到Referer中传递的数据,也许这是我的问题

推荐人:http://localhost:3000/?name=&budget=%C2%A31000

【问题讨论】:

  • body-parser 不处理多部分请求正文,尝试类似multer
  • @robertklep 我明白了,谢谢,随时添加它来回答。如果我只是将数据附加到 JSON,也许会更简单?我很惊讶我可以将 FormData 传递给 fetch 并将其作为多部分发送。

标签: node.js express express-4


【解决方案1】:

body-parser 不处理多部分正文,这是 FormData 提交的内容。

改为使用multer 之类的模块。

例如,检索请求的(常规)字段:

const multer = require('multer');
const upload = multer();

app.post('/send', upload.none(), (req, res) => {
  const formData = req.body;
  console.log('form data', formData);
  res.sendStatus(200);
});

【讨论】:

  • thx,知道任何工具可以获取表单数据并将其作为 JSON 对象(用于文本输入等)返回,以便通过 urlencoded 发送
  • @SuperUberDuper 你可能必须使用formData.entries() 之类的东西从表单内容构建一个JS对象。
  • upload.fields([]) 的幕后发生了什么?
  • 如果你不能让它工作,试试upload.any()而不是upload.fields([])。您可能最终想弄清楚要在数组中放入哪些字段规范,但any 是一个不错的起点。
  • 花了我一整天的时间研究了 100 多个解决方案,但没有任何效果,然后他终于挽救了我的一天,非常感谢。
猜你喜欢
  • 2016-01-13
  • 2016-03-23
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
相关资源
最近更新 更多