javascript - 客户端使用FormData异步上传文件,nodejs中间层应该作何处理?
伊谢尔伦
伊谢尔伦 2017-04-11 08:58:12
[JavaScript讨论组]

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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
黄舟

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

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

怪我咯

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号