使用node.js的Watson api

前端之家收集整理的这篇文章主要介绍了使用node.js的Watson api前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用此node.js代码来使用我们的ios应用程序中的ibm cloud bluemix中的watson api.任何人都可以告诉我这段代码在做什么,并为我们提供如何使用我们的应用程序中的watson服务的答案.
var express = require('express');
var https = require('https');
var url = require('url');

// setup middleware

var app = express();
app.use(express.errorHandler());
app.use(express.urlencoded()); // to support URL-encoded bodies
app.use(app.router);

app.use(express.static(__dirname + '/public')); //setup static public directory
app.set('view engine','jade');
app.set('views',__dirname + '/views'); //optional since express defaults to CWD/views

// There are many useful environment variables available in process.env.
// VCAP_APPLICATION contains useful information about a deployed application.

var appInfo = JSON.parse(process.env.VCAP_APPLICATION || "{}");
// TODO: Get application information and use it in your app.

// defaults for dev outside bluemix

var service_url = '<service_url>';
var service_username = '<service_username>';
var service_password = '<service_password>';

// VCAP_SERVICES contains all the credentials of services bound to
// this application. For details of its content,please refer to
// the document or sample of each service.

if (process.env.VCAP_SERVICES) {
  console.log('Parsing VCAP_SERVICES');
  var services = JSON.parse(process.env.VCAP_SERVICES);

//service name,check the VCAP_SERVICES in bluemix to get the name of the services you have

var service_name = 'question_and_answer';

  if (services[service_name]) {
    var svc = services[service_name][0].credentials;
    service_url = svc.url;
    service_username = svc.username;
    service_password = svc.password;
  } else {
    console.log('The service '+service_name+' is not in the VCAP_SERVICES,did you forget to bind it?');
  }

} else {
  console.log('No VCAP_SERVICES found in ENV,using defaults for local development');
}

console.log('service_url = ' + service_url);
console.log('service_username = ' + service_username);
console.log('service_password = ' + new Array(service_password.length).join("X"));

var auth = "Basic " + new Buffer(service_username + ":" +    service_password).toString("base64");

// render index page

app.get('/',function(req,res){
    res.render('index');
});

// Handle the form POST containing the question to ask Watson and reply with the answer

app.post('/',res){

// Select healthcare as endpoint 

var parts = url.parse(service_url +'/v1/question/healthcare');
// create the request options to POST our question to Watson

var options = { host: parts.hostname,port: parts.port,path: parts.pathname,method: 'POST',headers: {
      'Content-Type'  :'application/json','Accept':'application/json','X-synctimeout' : '30','Authorization' :  auth }
  };

// Create a request to POST to Watson

var watson_req = https.request(options,function(result) {
    result.setEncoding('utf-8');
    var response_string = '';

    result.on('data',function(chunk) {
      response_string += chunk;
    });

    result.on('end',function() {
      var answers_pipeline = JSON.parse(response_string),answers = answers_pipeline[0];
      return res.render('index',{'questionText': req.body.questionText,'answers': answers})
   })

  });

  watson_req.on('error',function(e) {
    return res.render('index',{'error': e.message})
  });

// create the question to Watson

var questionData = {
    'question': {
      'evidenceRequest': { 
        'items': 5 // the number of anwers
      },'questionText': req.body.questionText // the question
    }
  };

// Set the POST body and send to Watson

 watson_req.write(JSON.stringify(questionData));
 watson_req.end();

});

// The IP address of the Cloud Foundry DEA (Droplet Execution Agent) that hosts this application:

var host = (process.env.VCAP_APP_HOST || 'localhost');
// The port on the DEA for communication with the application:

var port = (process.env.VCAP_APP_PORT || 3000);
// Start server

app.listen(port,host);

解决方法

这些代码的大部分是Node需要的,并且在BlueMix环境中执行. VCAP_SERVICES是Bluemix环境变量,可用于获取您感兴趣的给定服务的凭据.在这种情况下,service_name设置为“question_and_answer”以访问问答平台服务.

在Bluemix环境中,您应该有一个问答服务实例和一个应用程序.当应用程序绑定到问答服务时,它会创建服务绑定.服务绑定具有访问服务实例的应用程序凭据.在这种情况下,VCAP_SERVICES包含用于与服务实例进行通信和身份验证的绑定的URL,用户名和密码.

从您的iOS应用程序,您将需要一些东西.首先,您需要一个服务绑定,并且您现在必须在Bluemix中创建它.获得Bluemix中的凭据后,您可以在iOS应用中使用这些凭据.或者您可以在Bluemix上托管应用程序,并让它处理与Watson的通信.

接下来,您需要能够调用问答服务,这是一项RESTful服务.在上面的代码中,变量选项包含将问题发布到Watson服务的必要信息.请注意,从凭证获取的service_url附加了一个额外的路径信息,以使用Watson For Healthcare域.

从那里你可以创建你的问题.变量questionData包含上面代码中的问题. question.questionText属性设置为你想问Watson的问题,比如,“我应该每天服用阿司匹林吗?”.

然后您可以将问题发布到Watson,如下面的代码片段所示:

watson_req.write(JSON.stringify(questionData));

节点是异步的,因此响应在http.request(…)中处理.答案将发回给请求的申请表

result.on('end',function() {
  var answers_pipeline = JSON.parse(response_string),answers = answers_pipeline[0];
  return res.render('index','answers': answers})
   })

其余代码是特定于节点的.但我已经概述了iOS应用程序中所需的基础知识.

猜你在找的Node.js相关文章