2013-09-29 192 views
0

为什么这段代码不起作用? 如果我评论 fs.readFileSync('file.html'); 代码工作,并创建文件“file.html” 但是,如果我去掉它fs.writeFileSync不工作,程序与错误崩溃:为什么我的fs.readFileSync不起作用

fs.js:427 return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); ^ Error: ENOENT, no such file or directory 'file.html' at Object.fs.openSync (fs.js:427:18) at Object.fs.readFileSync (fs.js:284:15) at Object. (/home/pedro/startupEngineering/hw3/Bitstarter/testrestler.js:15:6) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at 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; 
} 
+1

'没有这样的文件或目录'file.html' – SLaks

回答

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发生之前,您正在读取该文件。这就是为什么你得到这个错误。

0

你不写入文件直到complete事件触发,但您尝试立即从中读取。

由于它尚不存在,您会收到一个异常,您不会捕获该异常,所以程序在complete事件触发并写入文件之前退出。

您需要将尝试从写入文件的事件处理程序内的文件中读取的代码移动。