Ошибка неверных учетных данных при использовании анализатора тона из приложения nodejs - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь использовать службу тонального анализатора из приложения nodejs. У меня проблема с неавторизованным доступом, но эти учетные данные работают нормально, когда я использую их в curl.

Локальный запуск, в моем файле app.js я включил данные тонального анализатора следующим образом:

var ToneAnalyzerV3 = require('watson-developer-cloud/tone-analyzer/v3');

var toneAnalyzer = new ToneAnalyzerV3({
  version: '2017-09-21',
  iam_apikey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
});

Затем я добавил это, так что мое приложение прослушивает почтовые запросы в / тоне URL:

app.post('/tone', function(req, res, next) {

    var params = {'tone_input': req.body}

    toneAnalyzer.tone(params, function(err, data) {

    if (err) {
      return next(err);
    }
    return res.json(data);
  });
});

Но когда я вызываю его, я получаю «Несанкционированный: доступ запрещен из-занедействительные учетные данные ".

Дело в том, что эти учетные данные прекрасно работают в curl:

curl -X POST -u "apikey:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX" --header "Content-Type: application/json" --data-binary @tone.json "https://gateway-lon.watsonplatform.net/tone-analyzer/api/v3/tone?version=2017-09-21&sentences=false"
{"document_tone":{"tones":[{"score":0.6165,"tone_id":"sadness","tone_name":"Sadness"},{"score":0.829888,"tone_id":"analytical","tone_name":"Analytical"}]}}

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Причина, по которой вы получаете неавторизованные ошибки при локальном запуске, заключается в том, что ваша служба размещена в https://gateway-lon.watsonplatform.net. Если вы не указали конечную точку / URL в конструкторе ToneAnalyzerV3, то по умолчанию API / SDK будет Dallas. Таким образом, хотя ваши учетные данные могут быть правильными для London, они не являются правильными для Dallas.

Когда вы развернули свое приложение в облаке (которое, я полагаю, было в Лондоне), вы, вероятно, связалисервис в вашем приложении. Это устанавливает переменные среды, позволяющие SDK определять конечную точку.

Ваш конструктор должен выглядеть следующим образом:


var toneAnalyzer = new ToneAnalyzerV3({
  version: '2017-09-21',
  iam_apikey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
  url: 'https://gateway-lon.watsonplatform.net/tone-analyzer/api',
});

0 голосов
/ 25 октября 2019

Я не вижу проблем с кодом (также никогда не использовал вещи Уотсона), но вы можете проверить следующее:

  • Как форматируется запрос, который вы действительно отправляете: потому что я вижу, что выотправить param, которого нет в вашем запросе curl.
  • Использует ли ваша функция также POST (вы не предоставляете много подробностей о том, что именно делает вызов toneAnalyzer.tone)? Может быть, это конфликт заголовков или Content-Type.
  • Используете ли вы прокси-сервер (корпоративные настройки или тому подобное)? Если вы это сделаете, вы можете проверить, что узел правильно использует его.

Вы также должны предоставить немного больше информации о том, что именно делает ваш объект тона, и попытаться найти, где вызывается IBM APIсделано.

...