express3.0升级4.0时遇到的坑

  今天做项目迁移的时候遇到了一个坑,关于文件上传的时候,在express4.0+以后,bodyparser 不处理文件的问题。

  之前项目使用的是express3.0+版本,在做上传的excel通过node-xlsx文件解析时,升级以后的express4.0不在解析上传文件,即在你的body里找不到所上传的问件。需要在加入新的模块来满足之前的需求。我们要引入'connect-multiparty'来处理上传文件的问题。

4.0以后上传文件,你的body里边是得不到参数,并且找不到files这个参数。

 

我们需要在代码中引入 

var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();

在去后台打印你的req参数,如下图可见:

 

顺便贴一下node解析excel的代码,供参考学习。

后台使用的node,下面是服务端代码

var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
var xlsx = require('node-xlsx');
app.all('/yourPath', multipartMiddleware, function(req, res) {
        var data, error, fpath, resJson, result, sheet1, sheets;
        resJson = function(json) {
            res.setHeader('Content-Type', 'text/html; charset=UTF-8');
            return res.end(JSON.stringify(json));
        };
        result = {
            bstatus: {
                code: 0,
                des: 'success'
            },
            data: {
                errors: []
            }
        };
        fpath = req.files.file.path;
        try {
            sheets = xlsx.parse(fpath);
            if (sheets.length) {
                sheet1 = sheets[0];
            }
            data = [];
            if (sheet1.data) {
                data = sheet1.data;
            }
        } catch (_error) {
            error = _error;
            result.bstatus.code = 902;
            result.bstatus.des = '上传的文件不是EXCEL,或者有系统不能处理的数据异常';
            return resJson(result);
        }
    });

前端使用ajaxFileUpload组件进行上传

 var options = {
                    type: 'post',
                    url: 'yourPath', //用于文件上传的服务器端请求地址
                    secureuri: false, //是否需要安全协议,一般设置为false
                    fileElementId: fileElementId, //文件上传域的ID
                    dataType: 'json', //返回值类型 一般设置为json
                    data: data,
                    success: function (data, status){//服务器成功响应处理函数
                        //成功回调
                    
                    },
                    error: function (data, status, e){//服务器响应失败处理函数
                        //失败回调
                    }
                };
                $.ajaxFileUpload(options);        

 

posted @ 2016-04-18 21:34  angel_loong  阅读(374)  评论(0编辑  收藏  举报