是这样的,在react前端部分因为我的表单包含有图片,所以通过了FormData来实现异步上传,在nodejs中间层使用了formidable来解析接收这些数据(这样子做没问题吧?确实也成功的上传了...虽然感觉有点怪怪的)
router.post('/publish', function(req, res, next){ var fields=[]; var files=[]; var form = new formidable.IncomingForm(); form.encoding = 'utf-8'; form.maxFieldsSize = 2 * 1024 * 1024; form.keepExtensions= true; //保留后缀格式 form.uploadDir = 'public/uploads/'; form .on('field', function(field,value){ console.log(field,value); fields.push({field,value}); }) .on('file', function(field,file){ console.log(field,file); files.push({field,file}); }) .on('end', function(){ console.log('-> upload done'); console.log(fields); console.log(files); files.map(function(file){ /*重命名文件*/ fs.rename(file.file.path,form.uploadDir+file.file.name,function(err){ if(err){ throw err; }; }); }); superagent.post("127.0.0.1:8000/publish") /*请求头暂不设置,因为不知道是要'multipart/form-data'还是'json'*/ .send({ fields : fields, files : files }) .end(function(err,res){ if(err || !res.ok){ console.log(err); return false; } console.log("数据已转发"); }); }); form.parse(req); res.json({ data : "哦哦,这是来自服务器的数据" }); });
这是我的问题:
1 我们这次项目的架构还有一个python数据层,我需要把这些表单数据传给它,所以我现在有点迷惑了,数据需要在nodejs中间层解析吗?像我现在写的这样?还是说直接把req.body通过superagent转发给Python层就可以了呢?让后台自己去做处理。
2 我的客户端使用的也是superagent,不是jquery的ajax,这样应该不会有什么隐患吧?
3 异步上传表单是不是有点不太必要呢?其实我这么做的目的只是想在上传的过程中提示“正在发布”,上传后提示“发布成功”然后再在客户端做页面跳转。如果很没有必要的话还有什么方式能实现我的需求呢?
异步上传表单是个很常见的需求哇。至于最后还有一个python数据层,我看你这边是通过http交互的,那么在node处不处理都可以(这个看你喜好了,因为不知道你这个中间层的意义,个人觉得,可以在中间层处理校验,授权这些,python就只保存数据了)。
BTW:node和python打交道,可以用性能更高的rpc。异步上传表单是个很常见的需求哇。至于最后还有一个python数据层,
最后那个笑脸怎么弄出来的?