I have observed in this code that we can’t open the file after we have readFile.
The computer complains about Error [ERR_STREAM_WRITE_AFTER_END]: write after end
Of course if I remove the readFile function then this error goes away but I want to understand why this error is occurring even though I am using two different files for reading and opening.
What is the way to read and open two different files?
var objHttp = require('http');
var objFS = require('fs');
objHttp.createServer(function(argClientRequest, argResult) {
objFS.readFile('z.html',
function(argError, argData) {
argResult.writeHead(200, {
'Content-Type': 'text/html'
});
argResult.write(argData);
argResult.end();
}
);
objFS.open('mynewfile1.txt', 'r', (argErr, argFD) => {
if (argErr) throw argErr;
objFS.readFile('mynewfile1.txt',
function(argError, argData) {
if (argError) throw argError;
argResult.writeHead(200, {
'Content-Type': 'text/html'
});
argResult.write(argData);
return argResult.end();
}
);
objFS.close(argFD, (argErr) => {
if (argErr) throw argErr;
});
});
}).listen(8080);
Advertisement
Answer
var objHttp = require('http');
var objFS = require('fs');
function firstReader(argResult){
return new Promise(function(resolve,reject){
objFS.readFile("z.html",
function(argError, argData) {
argResult.writeHead(200, {
'Content-Type': 'text/html'
});
argResult.write(argData);
}
);
})
}
function secondReader(argResult){
return new Promise(function(resolve,reject){
objFS.open('mynewfile1.txt', 'r', (argErr, argFD) => {
if (argErr) throw argErr;
objFS.readFile('mynewfile1.txt',
function(argError, argData) {
if (argError) reject();
argResult.writeHead(200, {
'Content-Type': 'text/html'
});
argResult.write(argData);
}
);
objFS.close(argFD, (argErr) => {
if (argErr) reject();
});
});
})
}
objHttp.createServer(function(argClientRequest, argResult) {
Promise.all([firstReader(argResult),secondReader(argResult)]).then(function(){
argResult.end();
}).catch(function(){
argResult.end();
})
}).listen(8080);