IBM watson trade-off analytics javascript widget returns 一些未知错误

IBM watson trade-off analytics javascript widget returns some unknown error

我正在尝试 运行 IBM Watson 的权衡分析小部件以在网页中显示 trade-off 分析图。 Tradeoff Analytics API 正常启动,但是当我将问题提交给显示图表时,我收到了一些未定义的错误。 这是我使用 运行 权衡分析小部件的示例代码。

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 响应返回了响应 header WWW-Authenticate:Basic realm="IBM Watson Gateway Log-in"。此外,我在 javascript console XMLHttpRequest cannot load 中收到以下错误。请求的资源上不存在 'Access-Control-Allow-Origin' header。 Origin '' 因此不允许访问。响应具有 HTTP 状态代码 401。

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

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

根据您的代码,您正在尝试使用客户端小部件。您需要有一个代理应用程序来接收请求并使用您的 usernamepassword.

在您的客户端,您需要像这样的东西:

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);
  });
});

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

您可以在 github

中查看完整示例