从 nodejs 应用程序使用音调分析器时出现无效凭据问题

Invalid credentials problem when consumig tone analizer from a nodejs app

我正在尝试使用来自 nodejs 应用程序的音调分析器服务。我遇到未经授权的访问问题,但是当我在 curl.

中使用这些凭据时,它们工作正常

运行 在本地,在我的 app.js 文件中,我包含了音调分析器的数据,如下所示:

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

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

然后我添加了这个,所以我的应用程序在 /tone url:

中监听 post 请求
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);
  });
});

但是当我调用它时我得到 "Unauthorized: Access is denied due to invalid credentials"。

问题是这些凭据在 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"}]}}

我没有发现代码有问题(也从未使用过 watson 的东西),但您可以检查以下几点:

  • 您真正发送的请求是如何格式化的:因为我看到您发送的参数在您的 curl 请求中不存在。
  • 您的函数是否也使用 POST(您没有详细说明对 toneAnalyzer.tone 的调用究竟做了什么)?可能是 headers 或 Content-Type.
  • 的冲突
  • 您是否使用代理(企业设置或类似的东西)?如果这样做,您可以检查该节点是否正确使用它。

您还应该提供更多详细信息,说明您的语气 object 到底在做什么,并尝试找到对 IBM API 的调用是在哪里完成的。

您在 运行 本地时遇到未授权错误的原因是您的服务托管在 https://gateway-lon.watsonplatform.net 中。如果您未在 ToneAnalyzerV3 构造函数中指定端点 / url,则 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',
});