Javascript 如何在nodejs中读取和打开两个不同的文件?
我在这段代码中观察到,我们在读取文件后无法打开该文件 计算机抱怨错误[ERR\u STREAM\u WRITE\u AFTER\u END]:结束后写入 当然,如果我删除readFile函数,那么这个错误就会消失,但是我想了解为什么会发生这个错误,即使我使用两个不同的文件来读取和打开 如何读取和打开两个不同的文件 var objHttp=require'http'; var objFS=需要“fs”; objHttp.createServerfunctionargClientRequest,argResult{ objFS.readFile'z.html', 函数错误,argData{ argResult.writeHead200{ “内容类型”:“文本/html” }; argResult.writeargData; argResult.end; } ; 打开'mynewfile1.txt','r',argErr,argFD=>{ 如果argErr抛出argErr; objFS.readFile'mynewfile1.txt', 函数错误,argData{ 如果阿杰罗扔阿杰罗; argResult.writeHead200{ “内容类型”:“文本/html” }; argResult.writeargData; 返回argResult.end; } ; objFS.closeargFD,argErr=>{ 如果argErr抛出argErr; }; }; }.listen8080; 问题是argResult.end;读取z.html之后,当读取mynewfile1.txt时,会立即返回此消息,并且已将头和文件发送到客户端。您正在尝试再次发送,这在技术上是不可能的。您只需发送一次响应。问题是argResult.end;读取z.html之后,当读取mynewfile1.txt时,会立即返回此消息,并且已将头和文件发送到客户端。您正在尝试再次发送,这在技术上是不可能的。您只需发送一次响应。argResult是一个流。在第一个objFS.readFile调用中,您将结束argResult流,然后在第二个objFS.readFile调用中再次尝试写入argResult流。这就是为什么会出现错误 问题不在于文件访问。如果删除http侦听器并运行代码,则控制台中不会出现错误。argResult是一个流。在第一个objFS.readFile调用中,您将结束argResult流,然后在第二个objFS.readFile调用中再次尝试写入argResult流。这就是为什么会出现错误Javascript 如何在nodejs中读取和打开两个不同的文件?,javascript,node.js,fs,Javascript,Node.js,Fs,我在这段代码中观察到,我们在读取文件后无法打开该文件 计算机抱怨错误[ERR\u STREAM\u WRITE\u AFTER\u END]:结束后写入 当然,如果我删除readFile函数,那么这个错误就会消失,但是我想了解为什么会发生这个错误,即使我使用两个不同的文件来读取和打开 如何读取和打开两个不同的文件 var objHttp=require'http'; var objFS=需要“fs”; objHttp.createServerfunctionargClientRequest,ar
问题不在于文件访问。如果删除http侦听器并运行代码,则控制台中不会出现错误。您使用的是argResult.end;两次您不能发送两次响应。 对于这个问题,您需要使用promise来读取文件并在回调后解决它们。你可以用
Promise.All([promise1,promise2]).then((data)=>{
argResult.end();
})
这里promise1是第一个文件读取器,promise2是第二个文件读取器
然后在两个承诺都得到解决时返回响应您使用的是argResult.end;两次您不能发送两次响应。
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);
对于这个问题,您需要使用promise来读取文件并在回调后解决它们。你可以用
Promise.All([promise1,promise2]).then((data)=>{
argResult.end();
})
这里promise1是第一个文件读取器,promise2是第二个文件读取器
然后在两个承诺都得到解决后回复非常感谢。非常感谢。
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);