Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在nodejs中读取和打开两个不同的文件?_Javascript_Node.js_Fs - Fatal编程技术网

Javascript 如何在nodejs中读取和打开两个不同的文件?

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

我在这段代码中观察到,我们在读取文件后无法打开该文件

计算机抱怨错误[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流。这就是为什么会出现错误


问题不在于文件访问。如果删除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);