4 votes

Erreur : erreur d'analyse, 0 sur 4344 octets analysés (Node.js)

J'essaie d'utiliser un programme de téléchargement pour télécharger mes fichiers. Le code que j'utilise est le suivant

app.post('/photos',loadUser, function(req, res) {
  var post = new Post();
  req.form.complete(function(err, fields, files) {
    if(err) {
      console.log(err);
      next(err);
    } else {
      ins = fs.createReadStream(files.file.path);
      ous = fs.createWriteStream(__dirname + '/public/uploads/photos/' + files.file.filename);
      post.filename=files.file.filename;
      post.file=files.file.path;
      util.pump(ins, ous, function(err) {
        if(err) {
          next(err);
        } else {
          post.save(function(err,docs) { 
        req.flash('info', 'information  Saved');
            res.redirect('/photos');
          });
        }
      });
    }
  });
});

Lorsque je supprime la méthode loadUser, tout fonctionne bien, mais lorsque j'utilise la méthode loadUser la méthode me donne une erreur. L'information console de l'erreur est :

Error: parser error, 0 of 4344 bytes parsed
at IncomingForm.write (/home/darhamid/node_modules/formidable/lib/incoming_form.js:141:17)
at IncomingMessage.<anonymous> (/home/darhamid/node_modules/formidable/lib/incoming_form.js:91:12)
at IncomingMessage.emit (events.js:67:17)
at HTTPParser.onBody (http.js:121:23)
at Socket.ondata (http.js:1349:22)
at TCP.onread (net_uv.js:312:27)

L'erreur est causée uniquement lorsque j'utilise la fonction loadUser, si je supprime la fonction loadUser, tout fonctionne bien. Je ne connais pas la raison de cette erreur et je suis bloqué. Quelqu'un peut-il m'aider ?

2voto

pradeek Points 6137

2voto

pesho hristov Points 618

Une autre cause possible du problème se trouve dans cette ligne :

request.setEncoding( "utf8" ) ;

1voto

Dar Hamid Points 595

Vous essayez d'effectuer l'opération de base de données avant tout, ce qui vous crée des problèmes. Essayez le code suivant :

app.post('/potos', function(req, res, next) {
  //req.form.pause();
  req.form.complete(function(err, fields, files) {
    if(err) {
      next(err);
    } else {
      ins = fs.createReadStream(files.file.path);
      ous = fs.createWriteStream(__dirname + '/public/uploads/photos/' + files.file.filename);
      var post = new Post();
      post.filename=files.file.filename;
      post.file=files.file.path;
      post.created_at = new Date();
      post.user_id = req.session.user_id;

      function postCreationFailed() {
        req.flash('error', 'Unable to Download ');
        res.render('photos/new', {
          locals: {
             post: new Post(),currentUser: req.session.user_id
          }
        });
      }

      util.pump(ins, ous, function(err) {
        if(err) {
          next(err);
        } else { 
                 console.log('\nuploaded %s to %s',  files.file.filename, files.file.path);
                 post.save(function(err) {
                   if (err)
                return postCreationFailed();
                   req.flash('info', 'photos Succesfully Uploaded');
               res.redirect('/user/photos/'+post.user_id);
                });
              }
      });
    }
  });
  req.form.on('progress', function(bytesReceived, bytesExpected){
    var percent = (bytesReceived / bytesExpected * 100) | 0;
    process.stdout.write('Uploading: %' + percent + '\r');
  });

});

Bonne chance...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X