2

I'm following this answer on using MULTER to upload csv from Express and parse the file.

But I'm getting this error:

Error: Route.post() requires callback functions but got a [object Object]

This is my route defination in routes.js:

var Multer = require('multer');
var Parse = require('csv-parse');
var fs = require('fs');

app.post('/lists/subscribers/import-csv', Multer({dest:'./uploads'}), subscriberController.save_csv);

and this is my save_csv function:

exports.save_csv = function(req, res, next) {

    var filePath = req.files.file.path;
    console.log(filePath);

    function onNewRecord(record){
        console.log(record)
    }

    function onError(error){
        console.log(error)
    }

    function done(linesRead){
        res.send(200, linesRead)
    }

    var columns = true; 

    parseCSVFile(filePath, columns, onNewRecord, onError, done);




    res.render('subscriber/import_Csv.ejs');
};


function parseCSVFile(sourceFilePath, columns, onNewRecord, handleError, done){
    
    var source = fs.createReadStream(sourceFilePath);

    var linesRead = 0;

    var parser = Parse({
        delimiter: ',', 
        columns:columns
    });

    parser.on("readable", function(){
        var record;
        while (record = parser.read()) {
            linesRead++;
            onNewRecord(record);
        }
    });

    parser.on("error", function(error){
        handleError(error)
    });

    parser.on("end", function(){
        done(linesRead);
    });

    source.pipe(parser);

}

How can I fix this?

The full ERROR message:

/Users/filipeferminiano/MEGA/crm-cloud/node_modules/express/lib/router/route.js:196
        throw new Error(msg);
        ^

Error: Route.post() requires callback functions but got a [object Undefined]
    at Route.(anonymous function) [as post] (/Users/filipeferminiano/MEGA/crm-cloud/node_modules/express/lib/router/route.js:196:15)
    at EventEmitter.app.(anonymous function) [as post] (/Users/filipeferminiano/MEGA/crm-cloud/node_modules/express/lib/application.js:481:19)
    at Object.module.exports (/Users/filipeferminiano/MEGA/crm-cloud/routes/routes.js:488:9)
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/lib/express-load.js:247:19
    at iterate (/Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:131:13)
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:142:25
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/lib/express-load.js:263:7
    at iterate (/Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:131:13)
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:142:25
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/lib/express-load.js:263:7
    at iterate (/Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:131:13)
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:142:25
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/lib/express-load.js:263:7
    at iterate (/Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:131:13)
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:142:25
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/lib/express-load.js:263:7
    at iterate (/Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:131:13)
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:142:25
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/lib/express-load.js:263:7
    at iterate (/Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:131:13)
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:142:25
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/lib/express-load.js:263:7
    at iterate (/Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:131:13)
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:142:25
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/lib/express-load.js:263:7
    at iterate (/Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:131:13)
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/node_modules/async/lib/async.js:142:25
    at /Users/filipeferminiano/MEGA/crm-cloud/node_modules/express-load/lib/express-load.js:263:7
Aryan
  • 3,338
  • 4
  • 18
  • 43
Filipe Ferminiano
  • 8,373
  • 25
  • 104
  • 174
  • Does the console print anything other than the error? Also, did the csv save on the server, despite the error? – pandamakes Mar 06 '17 at 02:43
  • just double checking. you did declare `subscriberController` right? edit: in routes.js – pandamakes Mar 06 '17 at 02:57
  • yes, there are other routes working with this controller – Filipe Ferminiano Mar 06 '17 at 03:07
  • From what I have used of multer, I needed to include the field name https://www.npmjs.com/package/multer#singlefieldname have you tried `Multer({dest:'./uploads/'}).single('fieldname')` or `Multer({dest:'./uploads/'}).any()` ? note the security concern with `.any()` method – pandamakes Mar 06 '17 at 03:18

0 Answers0