Express.js multer 看不到只有文本字段的文件

Express.js multer don't see text fields only file

当我使用 AJAX 请求将包含图片和 3 个文本字段的 multipart/form-data 表单发送到服务器时,multer 仅处理图像,但不处理文本字段。如何从那里提取文本字段? FormData constructor

  handleSubmit = () => {
    let formData = new FormData(this.refs.productSubmit);
    this.props.submitProduct(formData);
  }

Form

<form action="javascript:void(0);" onSubmit={this.handleSubmit} ref="productSubmit">
  <label> Название </label>
  <input className={'form-control'} type="text" name="name" />
  <label> Цена </label>
  <input className={'form-control'} type="text" name="price" />
  <label> Описание </label>
  <input className={'form-control'} type="text" name="description" />
  <label> Изображение </label>
  <input className={'form-control'} type="file" name="picture" style={{height: '100%'}}/>
  <hr/>
  <button className={'btn btn-warning btn-lg'} bsSize={'small'} type="submit"> Добавить </button>
</form>

Async action creator with AJAX call inside

export function submitProduct(formData) {
  return function(dispatch) {
    return (
      $.ajax({
        url: '/addproduct',
        method: 'post',
        cache: false,
        contentType: false,
        processData: false,
        data: formData,
        success: data => {
          //dispatch(addedProduct());
        },
        error: (xhr, status, err) => {
          console.error(this.props.url, status, err.toString());
        }
      })
    );
  };
}

Server-side request processer

  app.post('/addproduct', isLoggedIn, isAdmin, upload.single('image'), (req, res) => {
    console.log(req);
    console.log(req.body);
    console.log(req.file);
});

但 req.body 未定义。文件可访问。有效负载请求中存在字段,我可以用 firefox 查看它们 devtools.How 以获得 thoose 文本字段?

从 Express 4.0 开始,您需要手动添加 body-parser 中间件,否则表单不会被解析并且 req.body 将是未定义的。

在你的主文件中,你应该这样做:

var express = require('express');
var bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

// ...

module.exports = app;