如何处理express 4中的FormData

问题描述 投票:0回答:3

我尝试将一些表单数据发送到我的节点服务器,但是

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

node.js express express-4
3个回答
146
投票

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);
});

4
投票

也试试这个

稍微改进了@robertklep答案,可以将响应作为json发送

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

app.post('/send', upload.any(), (req, res) => {
  console.log('data', req.body);
  res.setHeader('Content-Type', 'application/json');
  res.send(req.body);
});
npm i multer --save

0
投票
import express from 'express'
import multer from 'multer'

const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(multer().none());

如果您不想要上传功能,请添加

app.use(multer().none());

© www.soinside.com 2019 - 2024. All rights reserved.