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;
当我使用 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;