我正在尝试通过Node.js将数据添加到MySQL数据库。数据来自Dialogflow上的机器人,因此用于建立连接并添加行的代码位于exports.dialogflowFirebaseFulfillment
内部,并且仅在用户使用完该机器人后才运行。
它确实开始运行,但是需要很长时间(每个日志6分钟以上),并且连接超时(Error: connect ETIMEDOUT
)或由主机(Error: read ECONNRESET
)重置才能完成。
为了进行测试,我将代码移到了函数之外,因此它在部署代码后立即运行,并且运行良好。
所以,这不起作用:
'use strict';
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const admin = require('firebase-admin');
var mysql = require('mysql');
var pool = mysql.createPool({
host : 'xxx',user : 'xxx',password : 'xxx',database : 'xxx',connectionLimit : 10,acquireTimeout : 600000,connectTimeout : 600000
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request,response) => {
const agent = new WebhookClient({ request,response });
function getNameHandler(agent) {
// do some things
function createtable(conn){
const sql = "CREATE TABLE IF NOT EXISTS Clientes (\n"+
"ID int NOT NULL AUTO_INCREMENT,\n"+
"Nome varchar(150) NOT NULL,\n"+
"CPF char(11) NOT NULL,\n"+
"PRIMARY KEY (ID)\n"+
");";
conn.query(sql,function (error,results,fields){
if(error) return console.log(error);
console.log('criou a tabela!');
addRows(pool);
});
}
function addRows(conn){
const sql = "INSERT INTO Clientes(Nome,CPF) VALUES ?";
const values = [
['novo1','12345678901'],['novo2','09876543210'],['novo3','12312312399']
];
conn.query(sql,[values],fields){
if(error) return console.log(error);
console.log('adicionou registros!');
conn.end(); //fecha a conexão
});
}
pool.getconnection(function(err){
if(err) return console.log(err);
console.log('conectou no pedido final');
createtable(pool);
});
agent.add("user message");
}
let intentMap = new Map();
intentMap.set('Final',getNameHandler);
agent.handleRequest(intentMap);
});
这有效:
'use strict';
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const admin = require('firebase-admin');
var mysql = require('mysql');
var pool = mysql.createPool({
host : 'xxx',connectTimeout : 600000
});
function createtable(conn){
const sql = "CREATE TABLE IF NOT EXISTS Clientes (\n"+
"ID int NOT NULL AUTO_INCREMENT,fields){
if(error) return console.log(error);
console.log('adicionou registros!');
conn.end(); //fecha a conexão
});
}
pool.getconnection(function(err){
if(err) return console.log(err);
console.log('conectou no pedido final');
createtable(pool);
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request,response });
function getNameHandler(agent) {
// do some things
agent.add("user message");
}
let intentMap = new Map();
intentMap.set('Final',getNameHandler);
agent.handleRequest(intentMap);
});