基于express的form-data转发

问题:为解决跨域的问题,之前使用express框架在node层进行请求转发,在处理包含文件的form-data请求时,使用bodyParser无法获取到request.body及file

解决方法:npm install node-fetch connect-multiparty form-data -s

  1. node-fetch 转发请求到后台服务器,可以支持form-data
  2. connect-multiparty 一个可以解析form-data的express中间件
  3. 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));
});

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值