Node.js - 编写了空文件,但为啥呢?

Posted

技术标签:

【中文标题】Node.js - 编写了空文件,但为啥呢?【英文标题】:Node.js - Empty file written, but why?Node.js - 编写了空文件,但为什么呢? 【发布时间】:2012-04-04 21:30:12 【问题描述】:

TL;DR为什么第一个文件被写入,而剩下的文件是空的?

我在 Node.js 中有一个循环文件​​字符串数组列表的 for 循环。每个字符串代表其各自目录中的不同文件。该数组包含创建三个单独文件所需的三个值。创建并写入第一个文件后,将创建第二个和第三个文件,但仍为空。以下是代码的简写版本。非常感谢任何帮助。

for(i in file_tree) 

  fp = fs.createWriteStream(file_tree[i]);

  for(i in data) 
    fp.write(data[i]+'\n', function (err)  if(error) throw err;);
  

 // end for loop - file_tree

====== 解决方案=====

file_tree = [
    pn+ '/theme/file1',
    pn+ '/theme/file2',
  pn+ '/theme/file3',
];

for(i in file_tree) 

    file_name = file_tree[i];
    fp = fs.createWriteStream(file_name);

    data = [];
    switch(file_name) 
        case pn+ "/theme/file1":
                    --- snip --
            break;

        //
        // ERROR BEGINS HERE : Notice no '/' prefix
        //
        case pn+ "theme/file2":
            --snip--
            break;

        default: show(help);
    

    for(i in data) 
            fp.write(data[i]+'\n', function(err)  if (err) throw err; );
    

【问题讨论】:

您的意思可能不是if(error),而是if(err)。您还使用了两次i,但这不应该有任何副作用。通过这些更改,我仍然无法重现效果。使用my demo program,两个文件都被写入并且是相同的。你能提供一个complete 的例子吗?您的系统上是否出现my demo program 的问题? 我发现了问题所在。我在代码的长格式版本中缺少一个斜杠。很抱歉浪费您的时间,感谢您的关注。 @phihag - 很好。我写了错误的代码试图举个例子。非常感谢。 您介意自己写一个答案并详细说明您所做的更改吗?这样,任何有相同或类似问题的人也可以从这个问题中受益。谢谢! file_tree = [ pn+ '/theme/file1', pn+ '/theme/file2', pn+ '/theme/file3', ]; for(i in file_tree) file_name = file_tree[i]; fp = fs.createWriteStream(file_name);数据 = []; switch(file_name) case pn+ "/theme/file1": --- snip -- break; // // 错误从这里开始:注意没有'/'前缀 // case pn+ "theme/file2": --snip-- break;默认值:显示(帮助); for(i in data) fp.write(data[i]+'\n', function(err) if (err) throw err; ); 【参考方案1】:

data 未正确初始化。之前的代码是:

file_tree = [ pn+ '/theme/file1', pn+ '/theme/file2', pn+ '/theme/file3'];
for(i in file_tree) 
    file_name = file_tree[i];
    fp = fs.createWriteStream(file_name);
    data = [];
    switch(file_name) 
    case pn+ "/theme/file1":
        data.push("content-1");
        break;
    case pn+ "theme/file2": // <-- error
        data.push("content-2");
        break;
    default: show(help);
    
    for(i in data) 
        fp.write(data[i]+'\n', function(err)  if (err) throw err; );
    
 

由于 case 语句缺少斜杠,因此不匹配,因此 data 为空。

【讨论】:

以上是关于Node.js - 编写了空文件,但为啥呢?的主要内容,如果未能解决你的问题,请参考以下文章

/var/lib/php5 填充了空会话文件

在 node.js 中将数组传递给玉模板时遇到问题

为啥我在 node.js 中使用 sendFile() 方法为两个路由提供静态文件时会出错

在 Node.js 中编写文件

在 Node.js 中编写文件

C语言中 内存消亡 指向她的指针就一定消亡或成了空指针为啥是错的啊