客户端使用FormData异步上传文件,nodejs中间层应该作何处理?

是这样的,在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 异步上传表单是不是有点不太必要呢?其实我这么做的目的只是想在上传的过程中提示“正在发布”,上传后提示“发布成功”然后再在客户端做页面跳转。如果很没有必要的话还有什么方式能实现我的需求呢?图片描述

阅读 4.9k
2 个回答

异步上传表单是个很常见的需求哇。至于最后还有一个python数据层,我看你这边是通过http交互的,那么在node处不处理都可以(这个看你喜好了,因为不知道你这个中间层的意义,个人觉得,可以在中间层处理校验,授权这些,python就只保存数据了)。

BTW:node和python打交道,可以用性能更高的rpc。异步上传表单是个很常见的需求哇。至于最后还有一个python数据层,

最后那个笑脸怎么弄出来的?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题