Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 如何更正写入文件时的捕获错误?_Javascript_Node.js_Error Handling_Node Modules - Fatal编程技术网

Javascript 如何更正写入文件时的捕获错误?

Javascript 如何更正写入文件时的捕获错误?,javascript,node.js,error-handling,node-modules,Javascript,Node.js,Error Handling,Node Modules,我在捕获模块fs writeFile中的错误时遇到问题 我试图尝试/catch以获取catch错误并写入日志,但它不起作用。 在debbuger错误中不要继续执行catch块,并且在调用太多次之后,什么都没有 const fs = require('fs'); const writeData = (body) => { try{ const stringData = JSON.stringify(body); fs.writeFile('.

我在捕获模块fs writeFile中的错误时遇到问题

我试图尝试/catch以获取catch错误并写入日志,但它不起作用。 在debbuger错误中不要继续执行catch块,并且在调用太多次之后,什么都没有

const fs = require('fs');

const writeData = (body) => {
    try{
        const stringData = JSON.stringify(body);
            fs.writeFile('./data76/data.json', stringData, {flag: 'a+'} ,(err) =>{
                if(!err){
                    console.log('file was writed');
                }else {
                    console.error('Error writing new data');
                    throw new Error(err);
                }
            });

    }catch(error){
        console.error('THIS ERROR!!!!!');
         let dataError = JSON.stringify(error);
         fs.open('./logs/error.log', 'wx', (err, fd) => {
             if(!err){
                 fs.writeFile(fd, dataError, (err) => {
                     if(!err){
                         fs.close(fd, (err) => {
                             if(!err){
                                 console.log('log was written success');

                     }else{
                                 console.error('file log wasn\'t closed');                                
                             }
                         });
                     }else{
                        console.error('log wasn\'t writed'); 
                     }
                 });
             }else {
                 fs.writeFile(fd, dataError, (err) => {
                     if(!err){
                         console.log('log was writed');
                     }else {
                         console.error('log wasn\'t writed');
                     }
                 });
             }
         });
    };

};

const body = {
    "name": {
        "first": "John",
        "jobtitle": "Driver"
    },
    "uuid_company": "ab667468-d7c5-469e-b402-0bd2d71073fa",
    "license_number": "AB58659",
    "phone": "+19019876512",
    "uuid": "08475753",
    "place_id": "place_not_matter",
    "birthday": "10.12.1967"
};

writeData(body);
结果,我等待捕获错误并将其写入文件。
我的个人记录器

try/catch
在wait/promises之外无法捕获异步回调内部抛出的错误。因此,如果您试图在
fs.writeFile()
的回调中处理错误,则需要在
fs.writeFile()
回调中插入错误处理代码,或者(更好的是)使用promise版本的文件处理,让错误通过promises传播

此外,大多数写入文件的错误都不是暂时性错误。因此,尝试再次编写实际上是一种解决方案,而不是遇到相同的问题,这将是非常罕见的。更典型的错误是磁盘已满、媒体错误、卷未响应等。。。只要再试一次,这些都不可能突然奏效。此外,每种特定类型的错误可能需要不同的策略来处理。是否有您遇到的特定类型的错误需要制定策略


另外,
fs.writeFile()
将直接获取文件路径,然后它将为您处理
fs.open()
fs.close()
。您不需要手动打开、写入和关闭它。

对于异步抛出的异常,您不能使用
try
/
catch
,例如
writeFile
回调中的异常。(如果您使用承诺和
等待
,则可以)。不要抛出错误,只需将错误处理代码放入
else
块中,并删除
try
@IlyaRogatkin-除非使用承诺,否则无法从异步回调抛出错误。记住,顶级函数已经在调用异步回调时返回。当您从回调中抛出时,它所做的只是返回到某个文件系统平台代码中,而不做任何操作。当从异步回调抛出时,您无法捕获更高级别的异常。我可以使用writeFileSync,或者这不是node.js中的最佳实践?@ILYAROGAKIN-
fswriteFileSync()
应该只在启动/初始化时使用,或者在某个单用户脚本中使用(该脚本永远不会有来自多个用户的多个请求)。因此,在服务器中,您只会在服务器初始化时使用它,而不会在请求处理程序中使用它。由于node.js运行Javascript单线程,并且
fs.writeFileSync()
会阻塞该线程,因此会破坏服务器的可伸缩性。