2013-03-06 20 views
8

Sono nuovo a Node ed Express, stavo cercando di creare qualcosa con Express solo per iniziare, quindi ho affrontato questo problema.Express - res.send() funziona una volta

Il primo res.send() funziona bene, ma il secondo non viene attivato.

Ecco il mio codice:

var express = require('express'), 
    app  = express(), 
    fs  = require('fs'), 
    visits; 


app.listen(8080); 

app.get('/', function(req,res) { 

    res.send('Hello'); 

    fs.readFile('counter.txt','utf-8', function(e,d) { 

     if (e) { 
      console.log(e); 
     } 
     else { 
      console.log(parseInt(d) + 1); 
      fs.writeFile('counter.txt',parseInt(d) + 1); 
      res.send('<p id="c">' + (parseInt(d) + 1) + '</p>'); 
     } 

    }) 
... 

'Ciao' viene inviato, ma non è res.send('<p> .. </p>');. Se commento res.send('Hello');, i visitatori verranno mostrati.

Grazie in anticipo.

risposta

6

res.send() è pensato per essere chiamato solo una volta.

Prova a modificare:

app.get('/', function(req,res) { 
    var response = 'Hello'; 
    fs.readFile('counter.txt','utf-8', function(e,d) { 
     if (e) { 
     console.log(e); 
     res.send(500, 'Something went wrong'); 
     } 
     else { 
     console.log(parseInt(d) + 1); 
     fs.writeFile('counter.txt',parseInt(d) + 1); 
     response += '<p id="c">' + (parseInt(d) + 1) + '</p>'; 
     res.send(response); 
     } 
    }) 
}); 

(o semplicemente res.send("Hello<p id=..."), ma si ottiene il punto :)

+0

Grazie, ho capito, quindi devo chiamarlo solo una volta e inviare tutto quello che voglio, subito. ty! –

+1

Oggi ho trovato lo stesso problema e questo post mi ha aiutato molto +1 a tutti :) – Trialcoder

3

Questo perché res.send() finisce l'invio della risposta.

Quando viene rilevato res.send('Hello');, invia immediatamente la risposta. Quindi il prossimo res.send non viene eseguito e non è possibile visualizzare i visitatori. Commentando il primo res.send consente di visualizzare il secondo.

Problemi correlati