1

为什么这段代码不起作用?如果我评论 fs.readFileSync('file.html'); 代码有效,它创建文件'file.html'但是如果我取消注释它 fs.writeFileSync 不起作用,程序崩溃并出现错误:

fs.js:427 return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); ^ 错误:ENOENT,在 Object.fs.readFileSync (fs.js:284:15) 的 Object.fs.openSync (fs.js:427:18) 中没有这样的文件或目录“file.html”。(/home/pedro/startupEngineering/hw3/Bitstarter/testrestler.js:15:6) 在 Module._compile (module.js:456:26) 在 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;
}
4

2 回答 2

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/');
}

to的第二个参数rest.get(Url).on是一个异步回调函数,它会在complete发生时调用,然后才会创建文件。但是您正在阅读该文件,甚至在complete发生之前。这就是您收到此错误的原因。

于 2013-09-29T17:52:03.500 回答
1

在事件触发之前您不会写入文件complete,但您会尝试立即从中读取。

由于它还不存在,您会得到一个您没有捕获的异常,因此程序在complete事件触发并写入文件之前退出。

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

于 2013-09-29T17:50:58.673 回答