我知道这可能是javascript / node.js noob问题,所以我提前道歉。在我的辩护中,我精通R ...但我只是想弄清楚node.js所以我可以用API打我的数据库并进行自动R调用。
使用API.ai node.js example,我可以运行以下代码:
var apiai = require('apiai');
var app = apiai('f20a022f27dd463fa28f8b24a67ad5e7');
var request = app.textRequest('Hello!', {
'sessionId': 123456
});
request.on('response', function(response) {
console.log(response);
console.log(response.result.fulfillment.speech);
console.log(response.result.metadata.intentName);
});
request.on('error', function(error) {
console.log(error);
});
request.end();
获取以下控制台结果:
{ id: '784f3622-7448-435c-a4f0-20a782ae29c5',
timestamp: '2016-11-07T20:59:10.3Z',
result:
{ source: 'agent',
resolvedQuery: 'Hello!',
action: '',
actionIncomplete: false,
parameters: {},
contexts: [ [Object] ],
metadata:
{ intentId: '87ac68b3-462d-479a-8dbb-c05d816db3b4',
webhookUsed: 'false',
intentName: 'welcome' },
fulfillment: { speech: 'Welcome to the jungle!', messages: [Object] },
score: 1 },
status: { code: 200, errorType: 'success' },
sessionId: '123456' }
Welcome to the jungle!
welcome
一切都很好。
但我不只是想获得控制台结果。我想将response.result.fulfillment.speech和response.result.metadata.intentName中的值作为API POST调用的输出传递。 (实际上我最终会将它们写入数据库,但由于我甚至无法将它们作为API POST调用的输出发回,所以这还不可行。)
因此。我试过这种方法:
var express = require("express");
var app = express();
var apiai = require('apiai');
var app2 = apiai('f20a022f27dd463fa28f8b24a67ad5e7');
app.post("/",function(req,res){
var keyword = req.query.keyword;
console.log(keyword);
var request = app2.textRequest('Hello.', {'sessionId': 123456});
request.on('response', function(response) {
console.log(response);
res.json(response);
});
request.on('error', function(error) {
console.log(error);
});
});
app.listen(3000);
我得到的只是一个控制台行,上面写着“Hello。”,看起来代码没有比console.log(关键字)更远。
谁能告诉我为什么这不起作用?即使它很简单。
提前致谢。