为什么这段代码不起作用? 如果我评论 fs.readFileSync( 'file.html'); 代码工作,它创建文件'file.html' 但如果我取消注释它fs.writeFileSync不起作用,程序崩溃并出现错误:
fs.js:427 return binding.open(pathModule._makeLong(path),stringToFlags(flags),mode); ^ 错误:ENOENT,没有这样的文件或目录'file.html' at Object.fs.openSync(fs.js:427:18) at Object.fs.readFileSync(fs.js:284:15) 在对象。 (/home/pedro/startupEngineering/hw3/Bitstarter/testrestler.js:15:6) 在Module._compile(module.js:456:26) at Object.Module._extensions..js(module.js:474:10) 在Module.load(module.js:356:32) 在Function.Module._load(module.js:312:12) 在Function.Module.runMain(module.js:497:10) 在启动时(node.js:119:16) 在node.js:901:3
#!/usr/bin/env node
var fs = require('fs');
var rest = require('restler');
var restlerHtmlFile = function(Url) {
rest.get(Url).on('complete', function(result) {
fs.writeFileSync('file.html',result);
});
};
if(require.main == module) {
restlerHtmlFile('http://obscure-refuge-7370.herokuapp.com/');
fs.readFileSync('file.html');
}
else {
exports.checkHtmlFile = checkHtmlFile;
}
答案 0 :(得分:1)
在complete
事件触发之前,您不会编写该文件,但是您尝试立即从中读取该文件。
因为它还不存在,所以你得到一个你没有捕到的异常,所以程序会在complete
事件触发并写入文件之前退出。
您需要移动尝试从写入文件的事件处理程序内的文件读取的代码。
答案 1 :(得分:1)
更改
var restlerHtmlFile = function(Url) {
rest.get(Url).on('complete', function(result) {
fs.writeFileSync('file.html',result);
});
};
if(require.main == module) {
restlerHtmlFile('http://obscure-refuge-7370.herokuapp.com/');
fs.readFileSync('file.html');
}
到
var restlerHtmlFile = function(Url) {
rest.get(Url).on('complete', function(result) {
fs.writeFileSync('file.html',result);
fs.readFileSync('file.html');
});
};
if(require.main == module) {
restlerHtmlFile('http://obscure-refuge-7370.herokuapp.com/');
}
rest.get(Url).on
的第二个参数是一个异步回调函数,它将在complete
发生时调用,然后才会创建文件。但是,即使在complete
发生之前,您正在阅读该文件。这就是为什么你会收到这个错误。