0

我正在尝试运行 IBM Watson 的 Tradeoff Analytics 小部件以在网页中显示权衡分析图。Tradeoff Analytics API 正在正常启动,但是当我将问题提交到显示图表时,我得到了一些未定义的错误。这是我正在使用运行 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="IBM Watson Gateway Log-in"此外,我在 javascript 控制台XMLHttpRequest cannot load中收到以下错误。请求的资源上不存在“Access-Control-Allow-Origin”标头。Origin '' 因此不允许访问。响应具有 HTTP 状态代码 401。

有人可以帮我解决这里可能出现的问题吗?

PS:我已经交叉检查了我的用户名和密码,它们似乎通过基于 REST 的 API 调用工作正常。

4

1 回答 1

1

根据您的代码,您正在尝试使用客户端小部件。您需要有一个代理应用程序来接收请求并使用您的usernameand 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);
  });
});

上面您将找到一个如何使用npm 模块实现代理express的示例。watson-developer-cloud

有一个完整的示例,您可以在github中查看

于 2015-08-18T02:20:09.733 回答