0

reddit にリクエストを送信し、JSON 形式でページを取得する簡単なプログラムを作成しています。これを行うには、reddit の URL の末尾に「.json」を追加します。たとえば、自分のプロフィールのページを取得したい場合は、「www.reddit.com/user/stebon24.json」を実行します。

これまでの私のプログラムは次のとおりです。以下にエラーをログに記録して説明します。

var http = require('http');
var options = {
    host: 'www.reddit.com',
    path: ''
};

module.exports = function(username) {

    console.log(username);

    options.path = '/user/' + username + '.json';

    var userData;

    http.get(options, function(res) { 

        res.on('data', function(data) {
            userData += data;
            console.log(userData);
        });

        res.on('end', function() {
            userData = JSON.parse(userData);
            console.log(userData);
        });
    });
};

エラーに関しては、プログラムが JSON.parse() を実行する必要があるポイントに到達したときに発生します。「データ」イベントで結果をログに記録すると、生の JSON が出力されることがわかるので、これを知っています。次に、このエラーが出力されます...

undefined:1
undefined{"kind": "Listing", "data": {"modhash": "", "children": [{"kind": "t1
^
SyntaxError: Unexpected token u
    at Object.parse (native)
    at IncomingMessage.module.exports (/home/stephen/Desktop/karmacrawler/engine/crawlUser.js:23:20)
    at IncomingMessage.EventEmitter.emit (events.js:126:20)
    at IncomingMessage._emitEnd (http.js:366:10)
    at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:149:23)
    at Socket.socketOnData [as ondata] (http.js:1367:20)
    at TCP.onread (net.js:403:27)
4

1 に答える 1

1

userData「未定義」として初期化されないように、の初期値を設定することを忘れないでください。

var userData = '';
于 2012-12-03T04:32:01.133 に答える