【问题标题】:nodeJS:fs.write callback and fs.writeFile not workingnodeJS:fs.write 回调和 fs.writeFile 不起作用
【发布时间】:2016-08-23 07:19:58
【问题描述】:

我对@9​​87654323@ 一无所知,直到我学习使用 casperjs 从网站上抓取一些内容并将它们保存到文件中。根据网上的一些例子,我写了这个文件scrape.js(json数据经过测试,与问题无关):

var fs = require('fs');
var url =  "http://w.nycweb.io/index.php?option=com_k2&view=itemlist&id=4&Itemid=209&format=json";
var casper = require('casper').create();

casper.start(url,function(){
  var json = JSON.parse(this.fetchText('pre'));
  var jsonOfItems={},items = json.items;
  items.forEach(function(item){
    jsonOfItems[item.id] = item.introtext.split('\n');
  })
  fs.write('videoLinks.json',JSON.stringify(jsonOfItems),function(err){
    if (err) console.log(err);
    console.log('videoLinks.json saved');
  })
});
casper.run();

当我在 Ubuntu 14.04 服务器的命令行中执行 casperjs scrape.js 时,我不会按预期看到文件已保存消息,尽管文件已正确保存。所以这是第一个问题:为什么回调根本没有运行?

其次,我也试过fs.writeFile,但是当我用它替换fs.write时,文件根本没有保存,也没有任何错误信息。

我确实注意到,在 casper 文档中,据说 casper 不是 node.js 模块,并且 node.js 的某些模块将不可用,但我怀疑这与我的问题有关。而且我认为值得一提的是,以前当我运行此脚本时,我只会得到类似

的响应

我是“fs”模块。

我必须按照这个question 在全球范围内重新安装fs 模块才能使其正常工作。

【问题讨论】:

  • 对了,顺便说一下(var json = JSON.parse(this.fetchText('pre'));)我在抓取页面时获取json数据感觉有点尴尬,如果您知道更好的方法,请随时发表评论。
  • CasperJS 与 node.js 无关,因为它建立在 PhantomJS 之上,而 PhantomJS 与 node.js 具有不同的环境。与 PhantomJS 捆绑在一起的 fs 模块中根本没有 fs.writeFile:phantomjs.org/api/fs

标签: node.js casperjs fs


【解决方案1】:

fs.write 需要一个文件描述符,您试图在其中为其指定文件名。试试 fs.writeFile。 https://nodejs.org/dist/latest-v4.x/docs/api/fs.html#fs_fs_writefile_file_data_options_callback

编辑:哦,你试过了。您确定它没有写在根目录之类的地方吗?尝试过那里的完整路径?

你运行的是什么版本的节点?

【讨论】:

    猜你喜欢
    • 2015-04-17
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 2017-11-27
    • 2013-10-13
    • 2019-12-12
    相关资源
    最近更新 更多