Вызов веб-действия IBM для https API не работает - PullRequest
0 голосов
/ 06 июня 2019

Я создаю помощника в IBM Watson. Помощник передает некоторую информацию веб-действию, которое вызывает https API и извлекает данные обратно помощнику в формате JSON.

Похоже, что веб-действие только работает, и время от времени появляется сообщение "ошибка: действие не выдало действительный ответ и неожиданно завершилось". всплывает. Не ясно, когда или что вызывает ошибку. Вызов одного и того же действия несколько раз в течение нескольких секунд приводит к случайному появлению сообщения об ошибке (я ничего не менял в действии или коде между вызовами). Когда ошибки нет, код работает безупречно и дает ожидаемый ответ.

Вот компактный код:

function main(msg){
  const https = require('https');
  var reqUrl = https URL;

return new Promise(function(resolve, reject) {
    https.get(reqUrl, (responseFromAPI) => {
        responseFromAPI.on('data', (chunk) => {
               completeResponse += chunk;
               let movie_info = JSON.parse(completeResponse);
               movie_info = movie_info.results[0];
               console.log(movie_info);
               resolve({movie_info});
        })
        responseFromAPI.on('error', (error) => {
            console.log(error);
            reject(error);
        });
    });
});
}

Журнал ошибок следует:

[ «2019-06-06T14: 35: 32.697875Z stderr: не определено: 1», "2019-06-06T14: 35: 32.697909Z stderr: {\" page \ ": 1, \" total_results \ ": 76, \" total_pages \ ": 4, \" results \ ": [{\" voice_count \ ": 39, \" id \ ": 541560, \" video \ ": false, \" voice_average \ ": 5, \" title \ ": \" Ветер \ ", \" популярность \ ": 37.299, \ "poster_path \": \ "\ / kcfPHZHSQODLCWdkUVLYATNyEVo.jpg \", \ "original_language \": \ "en \", \ "original_title \": \ "Ветер \", \ "genre_ids \": [27,37 , 53], \ "background_path \": \ "\ / bqi6QBbXmkBar98HJJKEV1HFx71.jpg \", \ "adult \": false, \ "Overview \": \ "Сверхъестественный триллер на западной границе конца 1800-х годов, The Звезды ветра Кейтлин Джерард как женщина-равнина, сведенная с ума жестокостью и изоляцией необузданной земли. \ ", \" Release_date \ ": \" 2019-06-06 \ "}, {\" voice_count \ ": 2832, \ "id \": 353491, \ "video \": false, \ "voice_average \": 5.6, \ "title \": \ "Темная башня \", \ "популярность \": 18.474, \ "poster_path \" ": \" \ / i9GUSgddIqrroubiLsvvMRYyRy0.jpg \ ", \" original_language \ ": \" en \ ", \" original_title \ ": \" Темная башня \ ", \" genre_ids \ ": [28,14,878,37 , 27], \ "backdrop_path \": \ "\ / pVVobDO8cezhVPvwD6EBUN0g3mt.jpg \", \ "для взрослых \ ": false, \" Overview \ ": \" Последний стрелок, Роланд Дешейн, был заключен в вечную битву с Уолтером О'Димом, также известным как ", "2019-06-06T14: 35: 32.697914Z stderr:", «2019-06-06T14: 35: 32.697951Z stderr: SyntaxError: Неожиданный конец ввода JSON», "2019-06-06T14: 35: 32.697955Z stderr: at JSON.parse ()", "2019-06-06T14: 35: 32.697959Z stderr: at IncomingMessage.responseFromAPI.on (eval at NodeActionRunner.init (/nodejsAction/runner.js:79:45),: 10: 38)", "2019-06-06T14: 35: 32.697963Z stderr: at IncomingMessage.emit (events.js: 189: 13)", "2019-06-06T14: 35: 32.697968Z stderr: at IncomingMessage.Readable.read (_stream_readable.js: 487: 10)", «2019-06-06T14: 35: 32.697972Z stderr: at flow (_stream_readable.js: 931: 34)», "2019-06-06T14: 35: 32.697976Z stderr: at resume_ (_stream_readable.js: 912: 3)", «2019-06-06T14: 35: 32.697980Z stderr: at process._tickCallback (internal / process / next_tick.js: 63: 19)», "неизвестно неизвестно: при сборе журналов возникла проблема. Возможно, отсутствуют данные." ]

movie_info - это список фильмов и данных, поэтому код подбирает данные только в позиции [0] (здесь фильм «Ветер»).

Я связался с хостами API, и они сказали, что API работает отлично, поэтому проблема может быть связана с самим веб-действием.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 06 июня 2019

Вы анализируете не весь ответ, а только первый блок

function main(msg){
  const https = require('https');
  var reqUrl = https URL;

return new Promise(function(resolve, reject) {
    https.get(reqUrl, (responseFromAPI) => {
       const chunks = [];
        responseFromAPI
          .on('data', chunk => chunks.push(chunk))
          .on('end', _=> {
               let movie_info = JSON.parse(Buffer.concat(chunks));
               movie_info = movie_info.results[0];
               console.log(movie_info);
               resolve({movie_info});
          })
          .on('error', (error) => {
            console.log(error);
            reject(error);
        });
    });
});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...