Javascript 如何将Dialogflow实现与MySQL DB连接?
我试图在我的GCP上将Dialogflow代理与MySQL DB连接起来,但效果不好。 我只想在控制台中看到结果,但没有结果。 我只能看到结果“Undefined”,但由于我不熟悉Node.js,我不确定这意味着什么。 由于结果中没有内容,我无法继续下一步 以下是我的index.js脚本:Javascript 如何将Dialogflow实现与MySQL DB连接?,javascript,mysql,dialogflow-es,Javascript,Mysql,Dialogflow Es,我试图在我的GCP上将Dialogflow代理与MySQL DB连接起来,但效果不好。 我只想在控制台中看到结果,但没有结果。 我只能看到结果“Undefined”,但由于我不熟悉Node.js,我不确定这意味着什么。 由于结果中没有内容,我无法继续下一步 以下是我的index.js脚本: //请参见https://github.com/dialogflow/dialogflow-fulfillment-nodejs //用于Dialogflow履行库文档、示例和报告问题 "严格使用",; c
//请参见https://github.com/dialogflow/dialogflow-fulfillment-nodejs
//用于Dialogflow履行库文档、示例和报告问题
"严格使用",;
const functions=require('firebase-functions');
const{WebhookClient}=require('dialogflow-fulfillment');
const{Card,Suggestion}=require('dialogflow-fulfillment');
const mysql=require('mysql');
process.env.DEBUG='dialogflow:DEBUG';//启用lib调试语句
exports.dialogflowFirebaseFulfillment=functions.https.onRequest((请求,响应)=>{
const-agent=new-WebhookClient({request,response});
log('Dialogflow请求头:'+JSON.stringify(Request.headers));
log('Dialogflow请求主体:'+JSON.stringify(Request.body));
功能欢迎(代理){
agent.add(`Welcometomyagent!`);
}
功能回退(代理){
agent.add(`我不明白');
agent.add(`对不起,你能再试一次吗?`);
}
函数connectToDatabase(){
const connection=mysql.createConnection({
主持人:“34.64.*.**”,
用户:“用户名”,
密码:“password”,
数据库:“dbname”
});
返回新承诺((解决、拒绝)=>{
connection.connect();
log('连接成功');
解决(联系);
});
}
函数查询数据库(连接、名称){
返回新承诺((解决、拒绝)=>{
connection.query('SELECT*FROM tb_user WHERE name=?',name,(错误、结果、字段)=>{
log('querysuccessed');
决心(结果);
});
});
}
函数queryDatabase2(连接){
返回新承诺((解决、拒绝)=>{
connection.query('SELECT*FROM tb_user',(错误、结果、字段)=>{
if(错误)console.log(错误);
console.log('results',results);
});
});
}
函数handleReadFromMysql(代理){
const user_name=agent.parameters.name;
console.log(用户名.name);
返回connectToDatabase()
。然后(连接=>{
log('connectToDatabase passed');
返回查询数据库(连接,用户名.name)
//返回queryDatabase2(连接)
。然后(结果=>{
log('queryDatabase passed');
控制台日志(结果);
add(`User name是${User\u name}.`);
//result.map(用户=>{
//if(user_name==user.name){
//add(`UserID是${user.id}`);
//}
//});
连接。结束();
});
});
}
让intentMap=newmap();
intentMap.set('Default Welcome Intent',Welcome);
intentMap.set('Default Fallback Intent',Fallback);
intentMap.set('findName',handleReadFromMysql);
代理handleRequest(intentMap);
});代码>我4个月前解决了这个问题,所以我分享我的代码来帮助像我这样的人
我使用数据库信息的socketPath。我忘了原因
function connectToDatabase() {
const connection = mysql.createConnection({
socketPath: '/cloudsql/*************:asia-northeast3:****',
user: '****',
password: '****',
database: '****'
});
return new Promise((resolve, reject) => {
connection.connect();
console.log('connection successed.');
resolve(connection);
});
}
并将查询功能设置为:
function findNameCountQuery(connection, name) {
return new Promise((resolve, reject) => {
var sql = `SELECT * FROM tb_user WHERE name = ?`;
var execSql = connection.query(sql, [name], (error, results) => {
if (error) throw error;
resolve(results);
});
});
async function findName(agent) {
const user_name = agent.parameters.person.name;
const connection = await connectToDatabase();
const result = await findNameQuery(connection, user_name);
result.map(user => {
message += `사용자 ID seq number : ${user.seq}\n`;
});
agent.add(message);
connection.end();
}
然后我使用代理函数,如:
function findNameCountQuery(connection, name) {
return new Promise((resolve, reject) => {
var sql = `SELECT * FROM tb_user WHERE name = ?`;
var execSql = connection.query(sql, [name], (error, results) => {
if (error) throw error;
resolve(results);
});
});
async function findName(agent) {
const user_name = agent.parameters.person.name;
const connection = await connectToDatabase();
const result = await findNameQuery(connection, user_name);
result.map(user => {
message += `사용자 ID seq number : ${user.seq}\n`;
});
agent.add(message);
connection.end();
}
希望对您有所帮助。嘿,HandlerReadFromMySQL的第一件事不应该返回承诺,它只需要使用代理对象向Dialogflow返回回复,就像您为欢迎而做的那样。