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.
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.