在内部函数中使用Node.js MySQL时超时

我正在尝试通过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);
});
shao1014 回答:在内部函数中使用Node.js MySQL时超时

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3148824.html

大家都在问