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.