我有两个关于下面代码的问题,我写的是保存一些REST服务返回的JSON数据
在向文件写入某些REST服务返回的数据之前,我遇到了一些问题。 问题不在于调用其他服务并获取数据。但就在它写入目录之前
当我调用该函数时,在跟踪中出现错误“错误:EISDIR:对目录的非法操作,打开'/ home / inttyl / data /'”
文件都正确保存在目录中 我不明白为什么会有错误。
第二个问题是输出,
我期待整个路径+文件名
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 ,我更新了跟踪,并始终打印最后一个文件名。你知道如何解决它吗?这是关闭的问题,但我不知道该怎么做。
答案 0 :(得分:0)
查看“处理”日志的最后一条消息:
处理写入文件:: / home / inttyl / data /
它不包含与其他文件类似的文件:
处理写入文件:: /home/inttyl/data/file1.js
因此,该过程正在尝试写入dir
而不是file
,这就是Error: EISDIR
在此功能中,您可能希望在处理之前确保currVal.fileName
有效。
使用let
或const
声明您的变量。
e.g。 const fullPath = dataDirectory + currVal.fileName;
这确实是关闭/范围的问题。您没有声明您的变量,即使使用var
,也可以将它们设置为全局范围。因此,对于循环中的每个步骤,您都将值赋给同一个变量。 “稍后”,在第一个 writefile 的“完成”处,它将记录分配给fullPath
的最后一个值。
通过声明变量,每个循环现在处理它自己的一组变量。
提示:使用'use strict'
。它会强制你声明变量。