问题:为解决跨域的问题,之前使用express框架在node层进行请求转发,在处理包含文件的form-data请求时,使用bodyParser无法获取到request.body及file
解决方法:npm install node-fetch connect-multiparty form-data -s
- node-fetch 转发请求到后台服务器,可以支持form-data
- connect-multiparty 一个可以解析form-data的express中间件
- form-data 重新组装前端提交的form-data数据
简要代码如下:
const express = require('express');
const app = express();
//bodyParser不支持form-data
const multipart = require('connect-multiparty');
const multipartyMiddleware = multipart();
const FormData = require('form-data');
const Fs = require('fs');
const fetch = require('node-fetch');
app.post('/test*', multipartyMiddleware, function(req, res, next){
const ajaxHeaders = req.headers;
const fields=req.body;
const files=req.files;
let form = new FormData();
if (fields) {
for (let i in fields) {
if (fields.hasOwnProperty(i)) {
form.append(i, fields[i]);
}
}
}
if (files) {
const item = files.file;
form.append(item['fieldName'], Fs.createReadStream(item['path']));
}
//如果要指定请求头,要获取form对象的请求头,其他信息可以自定义
let fileHeaders=form.getHeaders();
fileHeaders['ticket']=ajaxHeaders ['ticket'];
const address='http://test';
fetch(address, {
method: 'POST',
body: form,
headers: fileHeaders
})
.then(response => response.json())
.then(json => res.json(json));
});