为什么我的fs.readFileSync不起作用

时间:2013-09-29 17:48:48

标签: javascript node.js fs

为什么这段代码不起作用? 如果我评论     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;
}

2 个答案:

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