我正在尝试运行IBM Watson的Tradeoff Analytics小部件,以显示网页中的权衡分析图。 Tradeoff Analytics API正常启动,但当我将问题提交给show the graph时,我得到一些未定义的错误。 以下是我使用Tradeoff Analytics Widget运行的示例代码。
function errorHandler(payload){
alert(payload.errorMessage);
}
function onShowCompleteCB(payload){
alert('show Tradeoff graph complete');
}
function onStartCB(payload){
alert('sending trade-off problem');
var problem = <problem-json>;
taClient.show(problem, onShowCompleteCB);
}
var options = {
dilemmaServiceUrl : <tradeoff-service-url>,
username : <username>,
password : <password>
};
var taClient = new TradeoffAnalytics(options , document.getElementById('watson_widget'));
var s = taClient.subscribe('afterError', errorHandler);
taClient.start(onStartCB);
我还从javascript调试器注意到,对最后一个请求的HTTP响应返回了响应头 WWW-Authenticate:Basic realm =&#34; IBM Watson Gateway Log-in&#34; 。此外,我在javascript控制台中得到以下错误 XMLHttpRequest无法加载。 No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39;&#39;因此不允许访问。响应具有HTTP状态代码401。
有人可以帮我解决这里可能出现的问题吗?
PS:我已经交叉检查了我的用户名和密码,它们似乎通过基于REST的API调用正常工作。
答案 0 :(得分:1)
根据您的代码,您尝试使用客户端小部件。您需要拥有一个可以接收请求并使用username
和password
的代理应用。
在您的客户端,您将需要以下内容:
<强> HTML:强>
<div id='DIV_ID'></div>
<强> JS:强>
taClient = new TA.TradeoffAnalytics({
customCssUrl: 'https://ta-cdn.mybluemix.net/v1/modmt/styles/watson.css',
dilemmaServiceUrl: '/proxy',
profile: 'basic'
}, 'DIV_ID');
taClient.subscribe('afterError', function onError(){ /* on error */});
taClient.start(function onLoad(){ /* on load */});
}
服务器端(nodejs):
var tradeoffAnalytics = watson.tradeoff_analytics({
version: 'v1',
username: '<username>',
password: '<password>'
});
app.post('/proxy', function(req, res) {
tradeoffAnalytics.dilemmas(req.body, function(err, dilemmas) {
if (err)
return res.status(err.code || 500).json(err.error || 'Error processing the request');
else
return res.json(dilemmas);
});
});
上面您将找到如何使用express
和watson-developer-cloud
npm模块实现代理的示例。
您可以在github
中查看完整示例