【发布时间】:2018-10-06 14:10:59
【问题描述】:
我查看了Node.js Documentation,但没有找到如何应用选项(设置)和带有错误处理的回调函数。而且我必须使用 .writeFileSync(不是异步 .writeFile):
const settings = {
flags: 'w',
encoding: null, //must be null
mode: 0o666,
autoClose: true //not found this option
};
fs.writeFileSync(dest, buff, settings);
在我使用之前:
fs.writeFileSync(dest, buff, function (err) {
if (err) {
...
} else { ... console.log("OK") }
})
但我发现我必须应用 encoding: null, 选项来防止对源数据(buff)的任何修改,否则文件可能会被破坏。
编辑: 在得到惊人的答案和解释之后,我想说我对 Node.js 文档感到困惑: fs.writeFileSync(file, data[, options]) 是
fs.writeFile() 的同步版本。
由于这是 fs,writeFile() 方法的版本,我认为它可以具有相同版本的函数签名...
这是我最终版本的代码,但它仍然存在解码二进制文件(可以是任何文件类型)的问题(*顺便说一下,当我尝试使用 Axios.js 时,我看到错误:“请求失败,状态码为 500):
function download(url, dest, fileName, callback) {
//import http from 'http';
var request = http.get(url, function (response) {
var bodyParts = [];
var bytes = 0;
response.on("data", function (c) {
bodyParts.push(c);
bytes += c.length;
})
response.on("end", function () {
// flatten into one big buffer
var buff = new Buffer(bytes);
var copied = 0;
for (var i = 0; i < bodyParts.length; i++) {
bodyParts[i].copy(buff, copied, 0);
copied += bodyParts[i].length;
}
const settings = {
flags: 'w',
encoding: null, //not applicable / no changes
mode: 0o666
};
try {
fs.writeFileSync(dest, buff, settings);
let msgOK = {
filename: fileName,
status: 'OK',
text: `File downloaded successfully`
}
if (callback) callback(msgOK);
console.log(msgOK.text);
isLoading = false; //IMPORTANT!
} catch (err) {
console.error(err.stack || err.message);
let msgErr = {
filename: fileName,
status: 'ERROR',
text: `Error in file downloading ${err.message}`
}
ERRORS.push(err);
if (callback) callback(msgErr);
}
})
})
}
【问题讨论】:
标签: javascript node.js fs