Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème session NodeJs

Problème session NodeJs avec express session et formidable

    18 février 2019 à 19:56:39

    Bonjour,
    Sachez tout d’abord que je suis débutant sur nodeJs, soyez indulgent svp :)

    Bon voici mon problème :
    J'ai fais un formulaire d’upload de fichiers et j’aimerais stocker la progression dans req.session.upload sauf que quand j’affiche cette variable elle renvoi toujours 0 !

    Pour les sessions j’utilise express-session et pour traiter le formulaire j’utilise formidable

    Voici mon code

    app.post('/upload', function (req, res){
    
        var form = new formidable.IncomingForm();
    
        req.session.upload = { received: 0, total: 0 }
    
        form.parse(req);
    
        form.on('fileBegin', function (name, file){        
            file.path = __dirname + '/uploads/' + file.name;
        });
    
        form.on('file', function (name, file){
            console.log('Uploaded ' + file.name);
        });
    
        form.on('progress', function(bytesReceived, bytesExpected) {
            req.session.upload.received = bytesReceived
            req.session.upload.total = bytesExpected
        });
    
        res.send('Success')
    });
    
    app.get('/current-upload', (req, res) => {
    
        console.log(req.session.upload)
    
    })
    

    le dernier console.log(req.session.upload) affiche 0 aux 2 valeurs je comprend pas pourquoi ... des idées ?

    -
    Edité par __Bravo 18 février 2019 à 19:57:44

    • Partager sur Facebook
    • Partager sur Twitter
      19 février 2019 à 10:28:10

      Bonjour,

      form.on('progress', function(bytesReceived, bytesExpected){ 
         req.session.upload.received = bytesReceived
         req.session.upload.total = bytesExpected
         console.log(req.session.upload);
      });



      • Partager sur Facebook
      • Partager sur Twitter
        19 février 2019 à 19:43:43

        Merci de ta réponse,

        Ton code fonctionne mais ce que j'aimerais faire c'est pouvoir l'afficher sur la page /current-upload pour récupérer ces variables et les envoyer au client

        -
        Edité par __Bravo 19 février 2019 à 19:44:01

        • Partager sur Facebook
        • Partager sur Twitter
          20 février 2019 à 9:39:31

          __Bravo a écrit:

          Merci de ta réponse,

          Ton code fonctionne mais ce que j'aimerais faire c'est pouvoir l'afficher sur la page /current-upload pour récupérer ces variables et les envoyer au client

          Dans ce cas, je te recommande plutôt une socket pour envoyer ça au client depuis le serveur.

          • Partager sur Facebook
          • Partager sur Twitter
            20 février 2019 à 18:14:43

            Ah oui j'avais pas penser à ça merci :)

            Bon après plusieurs tentatives qui évidemment n'ont pas fonctionnes voici mon code actuellement :

            server.js :

            const express = require('express');
            const session = require('express-session')
            const formidable = require('formidable')
            
            const app = express();
            const server = require('http').createServer(app)
            const io = require('socket.io')(server);
            
            app.get('/', function (req, res){
            
                res.sendFile(__dirname + '/index.html');
            
            });
            
            app.post('/upload', function (req, res){
            
                console.log('Start uploading')
            
                io.on('connection', (socket) => {
                    console.log('start')
                    socket.emit('startUploading');
                })

             /* Du code */

             res.status(200) res.send('Success') }); server.listen(3000);

            index.html :

            <!DOCTYPE html>
            <html>
            <head>
                <title>Exemple</title>
            </head>
            <body>
                <form action="/upload" id="#uploadForm" enctype="multipart/form-data" method="post">
                    <input type="file" name="upload" multiple id="uploadInput">
                    <input type="submit" value="Upload" id="inputSubmit">
                </form>
            
                <div id="result">
            
                </div>
            
                <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
                <script src="/socket.io/socket.io.js"></script>
                <script>
                $(document).ready(function() {
            
                    var socket = io.connect('http://localhost:3000');
            
                    socket.on('startUploading', function () {
                      console.log('startUploading');
                    });
            
                    $("#inputSubmit").click(function (event) {
            
                        event.preventDefault();
            
                        var data = new FormData();
            
                        $.each($('#uploadInput')[0].files, function(i, file) {
                            data.append('file-'+i, file);
                        });
            
                        $.ajax({
                            url: '/upload',
                            type: "POST",
                            data: data,
                            cache: false,
                            contentType: false,
                            processData: false,
                            method: 'POST'
                        })
                        .done(function(data) {
                            alert(data)
                        });
            
                    });
                    
                });
                </script>
            </body>
            </html>


            Et j'ai l'impression que socket io n'arrive pas à se connecter dans le app.post('/upload', ...)

            Alors que je recois bien le résultat du formulaire ...

            -
            Edité par __Bravo 20 février 2019 à 19:37:36

            • Partager sur Facebook
            • Partager sur Twitter

            Problème session NodeJs

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown