如何从MySql数据库中获取结果并将它们发送回API.ai
我需要一些帮助来确定SQL查询的语法,同时通过连接到Google云Mysql数据库的api.ai webhook &使用它们。 虽然查询工作,在 '请求被超时'如何从MySql数据库中获取结果并将它们发送回API.ai
'use strict'; const mysql = require('mysql');
exports.name = (req, res) => {
let action = req.body.result['action'];
if (action === 'apple') {
callDB().then((output) => {
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify(output));
}).catch((error) => {
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify(error));
});
}
};
function callDB() {
return new Promise((resolve, reject) => {
try {
var connection = mysql.createConnection({
host: "<host>",
user: "<user>",
password: "<pass>",
database: "<DB>"
});
connection.query("SELECT description AS solution FROM mtable WHERE title LIKE '%Breakfast%'", function (error, results, fields) {
if (!error) {
let response = "The result is: " + results[0].solution;
response = response.toString();
let output = {'speech': response, 'displayText': response};
console.log(output);
resolve(output);
} else {
let output = {'speech': 'Error. Query Failed.', 'displayText': 'Error. Query Failed4.'};
console.log(output);
reject(output);
}
});
connection.end();
} catch (err) {
let output = {'speech': 'try-catch block error', 'displayText': 'try-catch block error3'};
console.log(output);
reject(output);
}
}
);
}
如果我取代与此查询,它的工作原理:
'SELECT描述AS解决方案从mtable WHERE ID LIKE 1001'
ID是列名,只有id`s
标题列名和标题,如早餐包等
这是网络挂接JSON所示的错误的部分:
"metadata": { "intentId": "<id>",
"webhookUsed": "true",
"webhookForSlotFillingUsed": "false",
"webhookResponseTime": 5000,
"status": {
"code": 206,
"errorType": "partial_content",
"errorDetails": "Webhook call failed. Error: Request timeout.",
"webhookTimedOut": true
},
我引用的代码如下线程, How to get results from MySql DB using node.js MySQL and send them back to API.ai
回答:
似乎是在您的查询字符串声明中的错别字(接近“%早餐% ''):
connection.query('SELECT description AS solution FROM mtable WHERE title LIKE '%Breakfast%'', function (error, results, fields) {
在分配您的查询字符串变量, 'SELECT描述AS解决方案从mtable WHERE标题LIKE '%早餐%'' 被解释为一个数字(因为%运营商)。
以任何方式修复您的单引号是否有帮助?
connection.query("SELECT description AS solution FROM mtable WHERE title LIKE '%Breakfast%'", function (error, results, fields) {
回答:
问题必须在您的服务器端与MySQL。我每天都这样做,并且在5秒钟内用于查询的情况下,它可以正常工作。
可能是你的Where子句正在创建全表扫描,因此超时返回Diagflow(> 5秒)或db连接中断。
您需要在例程和结束周期之前设置定时器,查看您的持续时间。单独从bash脚本运行查询并查看需要多长时间。你会发现超时正在发生的地方。在条件两边都有搜索参数(%)肯定会比搜索字符串的开始时间(意味着以搜索开始)和%search%(找到包含的任何子字符串)花费更长的时间。
祝你好运。
以上是 如何从MySql数据库中获取结果并将它们发送回API.ai 的全部内容, 来源链接: utcz.com/qa/265558.html