首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs库RequestJS未定义的MULTER req.files.fileName.path在使用ExpressJS路由时

Nodejs库RequestJS未定义的MULTER req.files.fileName.path在使用ExpressJS路由时
EN

Stack Overflow用户
提问于 2015-07-23 11:41:51
回答 1查看 389关注 0票数 0

我遇到了一个莫特,未定义的req.files.path字段的问题

首先,我的Express.js路径是:

routes.js

代码语言:javascript
复制
    router.post('/', function(req, res, next){
    // id, name, usersArray[], info, iconImg, headerImg
    var dataObject = new MyMongooseDataObject();
    // Receive data
    dataObject.id = uuid.v4();
    dataObject.name = req.body.name;
    dataObject.usersArray = req.body.usersArray;
    dataObject.info = req.body.info;

    return someBindingWrapperToStoreTheFile.postFile(uuid.v4(), [req.files.iconImg.path.toString(), req.files.headerImg.path.toString()])
        .then(function (postedFiles) {
            dataObject.iconImg = postedFiles.body.payload.files[0].id;
            dataObject.headerImg = postedFiles.body.payload.files[1].id;
            //save dataObject after storing images and processing data
            dataObject.save(function(savedDataObject){
                next(success(req, 200, 'dataObject Saved ' + savedDataObject.id));
            });
        })
        .catch(function(err){
            console.log('FAILED: ', err.stack);
            return next(failure(req, 500, err));
        });
});

当我使用一个单独的小requestJS脚本测试我的路由时,可以很好地工作

HTTP请求测试与requestJS

postDataObject.js

代码语言:javascript
复制
var request = require('request');
var fs = require('fs');
var uuid = require('uuid');

var formData = {
    name: 'someName',
    info: 'Some INFO and text description. ',
    'usersArray[0][uuid]': uuid.v4().toString(),
    'usersArray[1][uuid]': uuid.v4().toString(),
    'usersArray[2][uuid]': uuid.v4().toString(),
    // handle files
    iconImg: fs.createReadStream('/var/tmp/img/iconImg.png'),
    headerImg: fs.createReadStream('/var/tmp/img/headerImg.png')
};

request.post({url:'http://127.0.0.1:2233/api/postDataObject', formData: formData}, function (err, httpResponse, body) {
    if (err) {
        return console.error('failed:', err);
    }
    console.log('DataObject creation is successful!  Server responded with:', body);
});

现在,我正在为前端使用编写包装程序库,当我在另一个上下文中使用相同的代码时,看起来穆特处理req.files.headerImg.path不起作用,它是未定义的。

用于包装库的代码:

wrapper-lib.js

代码语言:javascript
复制
var request = require('request'),
    URI = require('URIjs'),
    fs = require('fs'),
    uuid = require('uuid'),
    path = require('path'),
    Promise = require('bluebird'),
    _ = require('lodash'),


DataObjectBindings.prototype.createDataObject = function (jsonRequestJSFormData) {
    var self = this;
               // this give the URL of the API to make requests to
    return self.getAPIurlHelper().then(function (apiUrl) {
            return new Promise(function (resolve, reject) {

                request.post({url: apiUrl, form: jsonRequestJSFormData}, function (err, res, body) {
                    if (err) {
                        reject(err);
                    } else {
                        resolve({res: res, body: JSON.parse(body)});
                    };
                }); //end of .post
            });   // end of  Promise 
        });  // end of getAPIurlHelper() function
}; // end of createDataObject function definition

最后,我用:

wrapper-test.js

代码语言:javascript
复制
// Instantiate Broker Client
var Wrapper = require('./wrapper-lib');

var wi;   //wrapper instalnce
var ConnectApiRequestTracer = require('./connectApiRequestTracer');
var fs = require('fs');

    ConnectApiRequestTracer().connect()
    .then(function () {
        wi = new Wrapper();

        return wi.createDataObject(
            uuid.v4(),
            {
                name: 'Some Cool Name',
                info: 'Some nice description and info. ',
                'usersArray[0][uuid]': uuid.v4().toString(),
                'usersArray[1][uuid]': uuid.v4().toString(),
                'usersArray[2][uuid]': uuid.v4().toString(),
                iconImg: fs.createReadStream('/var/tmp/img/iconImg.png'),
                headerImg: fs.createReadStream('/var/tmp/img/headerImg.png'),
        );
    })
    .then(function (data) {
console.log('SUCCESS: ', data);
    })
    .catch(function (err) {
        console.log('FAILED', err.stack);
    });

当我运行测试用例包装器-test.js时,它会抛出一个错误,说明req.files.iconImg.path是未定义的。

有什么不对的吗?

EN

回答 1

Stack Overflow用户

发布于 2015-09-20 16:07:42

试着使用:

  • req.file.iconImg.path
  • req.file.headerImg.path

而不是req.files.iconImg.path和req.files.headerImg.path

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31586331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档