Node.js risposta dalla richiesta http non chiamare la ‘fine’ evento senza, compresi i ‘dati’ evento

Quindi ho una semplice applicazione client di comunicare con un’applicazione lato server in node.js. Sul lato client, ho il seguente codice:

function send (name) {
    http.request({
        host: '127.0.0.1',
        port: 3000,
        url: '/',
        method: 'POST'
    }, function (response) {
        response.setEncoding('utf8');
        response.on('data', function (data) {
           console.log('did get data: ' + data);
        });
        response.on('end', function () {
            console.log('\n   \033[90m request complete!\033[39m');
            process.stdout.write('\n your name: ');
        });
        response.on('error', function (error) {
            console.log('\n Error received: ' + error);
        });
    }).end(query.stringify({ name: name})); //This posts the data to the request
}

Lo strano è che se io non sono la ‘data’ evento via:

    response.on('data', function (data) {
       console.log('did get data: ' + data);
    });

‘Fine’ evento per la risposta non è mai sparato.

Il codice del server è il seguente:

var query = require('querystring');
require('http').createServer(function (request, response) {
    var body = '';
    request.on('data', function (data) {
       body += data;
    });
    request.on('end', function () {
        response.writeHead(200);
        response.end('Done');
        console.log('\n got name \033[90m' + query.parse(body).name + '\033[39m\n');
    });
}).listen(3000);

Vorrei sapere perché è questo che succede quando la documentazione (a mia conoscenza) non ha bisogno di ascoltare i dati della manifestazione, per chiudere una risposta sessione.

OriginaleL’autore TheCodingArt | 2014-05-22

1 risposta

  1. 30

    Il 'end' è richiamato solo quando tutti i dati sono stati consumati, controllare i riferimenti di seguito:

    Evento: ‘fine’

    Questo evento viene generato quando non sono più disponibili i dati saranno comunicati.

    Nota che la fine evento non si accende a meno che i dati completamente
    consumati. Questo può essere fatto passando in modalità scorrimento, o da
    chiamando una read() più volte, fino a quando si arriva alla fine.

    Ma perché è necessario chiamare il .on('data',..)? La risposta è

    Se si fissa una data di listener di eventi, quindi, cambia il flusso
    in modalità scorrimento, e i dati saranno comunicati al gestore non appena
    e ‘ disponibile.

    Quindi, in pratica aggiungendo il data ascoltatore, cambia il flusso in modalità scorrimento e inizia a consumare i dati.

    Si prega di controllare questo link per riferimento in più su di esso.

    Grazie per il tid bit di informazione. Io non sono una piena comprensione di ciò che ‘scorre modalità’ significa, quindi questa è una grande spiegazione. E ‘un po’ strano IMO perché te l’aspetti ancora fuoco i dati di evento seguito dal fine evento, ma credo che c’è una pausa nel flusso di flusso a quel punto che deve tenere stato, senza spingere in avanti. Stavo guardando attraverso alcuni libri pubblicati per node.js circa un anno fa e questo non è dove si trova, così, forse, è di nuovo?
    Devo anche dire che ho avuto seriamente scavare giù dal http documentazione di trovare questo. Che la documentazione è seriamente nascosto e deve essere sottolineato il meglio.
    sì, ho dovuto scavare molto a trovare questa info, al primo inizio pensavo fosse un bug nel codice 🙂
    Ho la .on('data') ma il .on('end') non inizia mai
    si prega di inviare una nuova domanda su di esso, con più dettagli e il codice

    OriginaleL’autore fmodos

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *