从 nodejs 应用程序使用音调分析器时出现无效的凭据问题
Posted
技术标签:
【中文标题】从 nodejs 应用程序使用音调分析器时出现无效的凭据问题【英文标题】:Invalid credentials problem when consumig tone analizer from a nodejs app 【发布时间】:2019-10-25 09:32:55 【问题描述】:我正在尝试使用来自 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 中侦听发布请求:
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"]
【问题讨论】:
【参考方案1】:您在本地运行时遇到未经授权的错误的原因是您的服务托管在 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',
);
【讨论】:
谢谢,这似乎是问题【参考方案2】:我没有看到代码有问题(也从未使用过 watson 的东西),但您可以检查以下几点:
您真正发送的请求是如何形成的:因为我看到您发送了 curl 请求中不存在的参数。 您的函数是否也使用 POST(您没有提供有关对toneAnalyzer.tone 的调用的确切作用的详细信息)?可能是标题或 Content-Type 冲突。 您是否使用代理(企业设置或类似的东西)?如果这样做,您可以检查该节点是否正确使用它。您还应该提供更多关于您的音调对象具体做什么的详细信息,并尝试找到对 IBM API 的调用完成的位置。
【讨论】:
感谢您的回答。我将应用程序部署到 IBM Cloud 并且它工作正常。我的电脑好像有问题 谢谢,我不知道音调分析器的东西 :)。祝你有美好的一天以上是关于从 nodejs 应用程序使用音调分析器时出现无效的凭据问题的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS Lambda 上使用 nodejs“ref”模块时出现“无效的 ELF 标头”
当应用程序从命令行 + iOS 时出现错误的无效架构“arm”
TypeError:尝试获取资源时出现 NetworkError。从nodejs服务器获取数据时得到这个[重复]
尝试从 Visual c# 程序更新 oracle 时出现“无效操作。连接已关闭”错误
得到错误的结果:从 AngularJS 访问 api 并使用 NodeJS 从 firebase 查询结果时出现时区问题