Nodejs文件编写奇怪的行为和变量值问题

时间:2016-09-14 14:57:05

标签: node.js file

我有两个关于下面代码的问题,我写的是保存一些REST服务返回的JSON数据

问题1

在向文件写入某些REST服务返回的数据之前,我遇到了一些问题。 问题不在于调用其他服务并获取数据。但就在它写入目录之前

当我调用该函数时,在跟踪中出现错误“错误:EISDIR:对目录的非法操作,打开'/ home / inttyl / data /'”

文件都正确保存在目录中 我不明白为什么会有错误。

问题2

第二个问题是输出,

我期待整个路径+文件名

SUCCES写入档案:: /home/inttyl/data/file1.js

而不仅仅是路径

写入文件:: / home / inttyl / data /

的SUCCES

非常感谢您的帮助

这里是代码

services.forEach(function(currVal, index, array) {

    fullUrl = url + currVal.path;
    fullPath = dataDirectory + currVal.fileName;

    console.log(" Processing writing to file:: " + fullPath);

    request
        .get(fullUrl)
        .on("error", function(err) {
            console.log(err);
        })
        .pipe(fs.createWriteStream(fullPath))
        .on("error", function(err) {
            console.log(" ERROR : wirting in file : " + fullPath);
            console.log("        " + err);

        })
        .on("finish", function() {
            console.log("  Successfully write to file:  " +  fullPath);
        });

});

这里有我得到的痕迹:

 Processing writing to file:: /home/inttyl/data/file1.js
 Processing writing to file:: /home/inttyl/data/file2.js
 Processing writing to file:: /home/inttyl/data/file3.js
 Processing writing to file:: /home/inttyl/data/fil4.js
 Processing writing to file:: /home/inttyl/data/fil5.js
 Processing writing to file:: /home/inttyl/data/file6.js
 Processing writing to file:: /home/inttyl/data/file7.js
 Processing writing to file:: /home/inttyl/data/fil8.js

 ERROR : writing to the file  :/home/inttyl/data/
        Error: EISDIR: illegal operation on a directory, open '/home/inttyl/data/'
  SUCCES writing to file:: /home/inttyl/data/fil8.js
  SUCCES writing to file:: /home/inttyl/data/fil8.js
  SUCCES writing to file:: /home/inttyl/data/fil8.js
  SUCCES writing to file:: /home/inttyl/data/fil8.js
  SUCCES writing to file:: /home/inttyl/data/fil8.js
  SUCCES writing to file:: /home/inttyl/data/fil8.js
  SUCCES writing to file:: /home/inttyl/data/fil8.js
  SUCCES writing to file:: /home/inttyl/data/fil8.js

修改

问题1 解决了,我的不好,因为在数据中,有一个fileName attritue无效。

对于问题2 ,我更新了跟踪,并始终打印最后一个文件名。你知道如何解决它吗?这是关闭的问题,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

问题1

查看“处理”日志的最后一条消息:

处理写入文件:: / home / inttyl / data /

它不包含与其他文件类似的文件:

处理写入文件:: /home/inttyl/data/file1.js

因此,该过程正在尝试写入dir而不是file,这就是Error: EISDIR

的原因

在此功能中,您可能希望在处理之前确保currVal.fileName有效。

问题2

使用letconst声明您的变量。

e.g。 const fullPath = dataDirectory + currVal.fileName;

这确实是关闭/范围的问题。您没有声明您的变量,即使使用var,也可以将它们设置为全局范围。因此,对于循环中的每个步骤,您都将值赋给同一个变量。 “稍后”,在第一个 writefile 的“完成”处,它将记录分配给fullPath的最后一个值。

通过声明变量,每个循环现在处理它自己的一组变量。

提示:使用'use strict'。它会强制你声明变量。