一尘不染

使用Node.js将对象写入文件

node.js

我已经在stackoverflow / google上搜索了所有内容,但似乎无法弄清楚。

我正在抓取给定URL页面的社交媒体链接,并且该函数返回带有URL列表的对象。

当我尝试把这些数据写入到不同的文件,将其输出到文件[object Object],而不是预期:“
https://twitter.com/#!/101Cookbooks ”,’
http://www.facebook.com/ 101cookbooks
‘]就像我console.log()得到结果时一样。

这是我在Node中读写文件,尝试读取每一行(URL)并通过函数调用输入的悲伤尝试request(line, gotHTML)

fs.readFileSync('./urls.txt').toString().split('\n').forEach(function (line){
    console.log(line); 
    var obj = request(line, gotHTML); 
    console.log(obj); 
    fs.writeFileSync('./data.json', obj , 'utf-8'); 
});

供参考- gotHTML函数:

function gotHTML(err, resp, html){ 
    var social_ids = [];

    if(err){
        return console.log(err); 
    } else if (resp.statusCode === 200){ 
        var parsedHTML = $.load(html);

        parsedHTML('a').map(function(i, link){
            var href = $(link).attr('href');
            for(var i=0; i<socialurls.length; i++){
                if(socialurls[i].test(href) && social_ids.indexOf(href) < 0 ) {
                    social_ids.push(href); 
                }; 
            }; 
        })
    };

    return social_ids;
};

阅读 604

收藏
2020-07-07

共1个答案

一尘不染

obj 是您的示例中的数组。

fs.writeFileSync(filename,data,[options])
需要StringBuffer在data参数中。参见文档

尝试以字符串格式编写数组:

// writes 'https://twitter.com/#!/101Cookbooks', 'http://www.facebook.com/101cookbooks'
fs.writeFileSync('./data.json', obj.join(',') , 'utf-8');

要么:

// writes ['https://twitter.com/#!/101Cookbooks', 'http://www.facebook.com/101cookbooks']
var util = require('util');
fs.writeFileSync('./data.json', util.inspect(obj) , 'utf-8');

编辑:在示例中看到数组的原因是因为节点的实现console.log不只是调用toString,而是调用util.format see
console.js源代码

2020-07-07