ReferenceError: link is not defined (nodejs)

361
16 октября 2017, 00:52

Здравствуйте. Я нуб. Столкнулся с проблемой. Установил nodejs (6.11.4). Запускаю рабочий код через терминал в Visual Studio Code (node имя_файла). Подключаю модули (npm install имя_модуля). Выдает ошибку: "ReferenceError: link is not defined". Код у всех запускается, но у меня нет.

var request = require('request'),
cheerio = require('cheerio'),
fs = require('fs'),
path = require('path'),
res_arr = [],
ind = 0,
count_posts = 500;
var news_base_url = 'http://need.url?p=';
var file_json = path.resolve(__dirname, 'parse_file.json'); 
get_page_content(news_base_url + 0, 0);
function get_page_content( url, i ) {
request(url, function ( error, response, body ) {
    if( !error ) {
        var $ = cheerio.load(body),
            newses = $('.news-item');
        newses.each(function () {
            var self = $(this),
                cont = self.find('.news-text');

            res_arr[ind++] = {
                title: cont.find('.title').text(),
                date : cont.find('.date').text(),
                link : cont.find('a').attr('href'),
                img  : cont.find('img').attr('src')
            }
            get_post_content(link, ind);
            ind++;
        });
    } else {
        console.log("Произошла ошибка: " + error);
    }
});
}
function get_post_content( link, array_index ) {
request(link, function ( error, response, body ) {
    if( !error ) {
        var $ = cheerio.load(body, {decodeEntities: false});
        res_arr[array_index].content = $('.text').html();
    } else {
        console.log("Произошла ошибка: " + error);
    }
    if( count_posts-- <= 0 ){
        write_parse_res( file_json, JSON.stringify(res_arr) );
    }
});
}
function write_parse_res( file_json, str ) {
fs.writeFile(file_json, str, function ( err ) {
    if( err ) {
        console.log(err);
    } else {
        console.log('Добавил все');
    }
});
}
Answer 1

Странно, что код у всех запускается. Очевидно ошибка возникает в вызове

get_post_content(link, ind);

здесь link не определена. Судя по коду в get_post_content должно передаваться содержимое поля link

link : cont.find('a').attr('href'),

замените вызов например на

get_post_content(res_arr[ind-1].link, ind);

и очень сомнительно выглядит двойное увеличение индекса ind. Сначала в

res_arr[ind++]

потом (двумя строчками ниже) в

ind++;
READ ALSO
Javascript: перемещение по div, как по google maps

Javascript: перемещение по div, как по google maps

Есть div, который намного больше размера окнаИщу такую библиотеку или способ, чтобы по этому элементу можно было перемещаться как в гугл картах...

289
JS - Почему не воспроизводится анимация

JS - Почему не воспроизводится анимация

По каким-то непонятным причинам Canvas не хочет выполнять анимацию заполнения холста через setTimeout()В браузере получается просто конечный результат,...

308
Изменение параметра конфигурации браузера через userscript

Изменение параметра конфигурации браузера через userscript

Каким образом можно (возможно ли?) с помощью userscript (greasemonkey)изменить параметр конфигурации(about:config)вfirefox`?

248