Finishing Event

I am trying to pass a request object from my routes to a controller that handles downloads,

here is the route -

app.post('/upload/notes',auth.requiresApiLogin,function(req,res){
        upload.file(req,res);
});

here is the controller code (upload.js) that has the exported file method

var fs = require('fs'),
    uuid = require('node-uuid'),
    path = require('path'),
    Busboy = require('busboy');
exports.file = function(req, res) {
    var busboy = new Busboy({ headers: req.headers});
    busboy.on('file', function(fieldname, file, filename,transferEncoding,mimeType) {
        console.log("inside upload function");
        console.log(file);
    });
    busboy.on('field', function(fieldname, val, valTruncated,keyTruncated) {
        console.log("inside field function");
        console.log(fieldname);
    });
    busboy.on('finish',function(){
        console.log('finished');
    });
    req.pipe(busboy);
//
//    req.pipe(req.busboy);
//    req.busboy.on('file', function(fieldname, file, filename,transferEncoding,mimeType) {
//        var fName = uuid.v4();
//        console.log(filename);
//        var fileext = filename.substr(filename.lastIndexOf('.') + 1);
//
//        console.log(transferEncoding);
//        console.log(mimeType);
//        var filepath = path.normalize(__dirname + '/../../');
//        var fstream = fs.createWriteStream(filepath+'/server/uploads/'+fName+'.'+fileext);
//        file.pipe(fstream);
//        fstream.on('close', function () {
//            res.redirect('back');
//        });
//    });
};

So, what I see is that both the fields and the files are written to the console, but the finish event does not fire. What else should I try?

+4
source share
2 answers

You need to use the stream somehow file. For testing purposes, you can ignore data by adding file.resume();a file event handler inside.

+17
source

. ? , . .

. ,

0

Source: https://habr.com/ru/post/1547263/


All Articles