Express – res.send() works once

Posted on

Express – res.send() works once

I’m new to Node and Express, I was trying to make something with Express just to get started, then I faced this problem.

First res.send() works well, but the second one doesn’t fire.

Here’s my code:

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>');
        }

    })
...

‘Hello’ is sent, but res.send('<p> .. </p>'); isn’t. If I comment res.send('Hello');, visitors will be shown.

Thanks in advance.

Solution :

res.send() is meant to be called just once.

Try this instead:

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);
      }
  })
});

(or just res.send("Hello<p id=..."), but you get the point 🙂

This is because res.send() finishes sending the response.

When res.send('Hello'); is encountered it sends the response immediately. So next res.send is not executed and you cannot see visitors. Commenting the first res.send allows you to view the second one.

Leave a Reply

Your email address will not be published. Required fields are marked *