2013-09-29 235 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事件觸發並寫入文件之前退出。

您需要將嘗試從寫入文件的事件處理程序內的文件中讀取的代碼移動。