Javascript 如何将Dialogflow实现与MySQL DB连接?

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

我试图在我的GCP上将Dialogflow代理与MySQL DB连接起来,但效果不好。 我只想在控制台中看到结果,但没有结果。 我只能看到结果“Undefined”,但由于我不熟悉Node.js,我不确定这意味着什么。 由于结果中没有内容,我无法继续下一步

以下是我的index.js脚本:

//请参见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返回回复,就像您为欢迎而做的那样。