Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lambda Node.js Mysql RDS超时_Mysql_Node.js_Aws Lambda_Rds - Fatal编程技术网

Lambda Node.js Mysql RDS超时

Lambda Node.js Mysql RDS超时,mysql,node.js,aws-lambda,rds,Mysql,Node.js,Aws Lambda,Rds,我在Node.js中编写的lambda函数在连接到RDS时超时 奇怪的是,这个超时只发生在第一个请求中 所有后续请求都与数据库一起工作,没有超时 知道为什么吗 仅供参考,不使用任何专有网络 var mysql = require('mysql'); var pool = mysql.createPool({ host : 'ahost', user : 'auser', password : 'apassword', database : 'adb', po

我在Node.js中编写的lambda函数在连接到RDS时超时

奇怪的是,这个超时只发生在第一个请求中

所有后续请求都与数据库一起工作,没有超时

知道为什么吗

仅供参考,不使用任何专有网络

var mysql = require('mysql');

var pool = mysql.createPool({
  host     : 'ahost',
  user     : 'auser',
  password : 'apassword',
  database : 'adb',
  port : 3306
});


exports.handler = async (event, context) => {
    let request = JSON.parse(event.body);
    let question = request.question;
    let answered = question.answered;
    let sId = request.sid;
    let questionnaireId = request.questionnaireId;
    let hutk = request.hutk;
    let questionId = question.question.id;

    pool.getConnection((error, connection) => {
        if (error) throw error;
        let values = [];
        if(Array.isArray(answered)){
            let i = 0;
            while(i < answered.length){
                let td = [
                    questionnaireId,
                    sId,
                    questionId,
                    answered[i],
                    hutk
                ];
                values.push(td);
                i++;
            }
        } else {
            let td = [
                questionnaireId,
                sId,
                questionId,
                answered,
                hutk
            ];
            values.push(td);
        }

        let delsql = "DELETE FROM answers WHERE sId= ? AND `key` = ?";
        connection.query(delsql, [sId, questionId], function(err, result){
            if(err) throw err;
        });

        let sql = "INSERT INTO answers (qId, sId, `key`, value, hutk) VALUES ?";
        connection.query(sql, [values], function(err, result){
            if(err) throw err;
            console.log("Successfull Insert")
            connection.release();
        });

    });

    // TODO implement
    const response = {
        statusCode: 200,
        headers: {
                    'Access-Control-Allow-Origin': '*',
                    'Access-Control-Allow-Credentials': true
                },
        body: JSON.stringify({message : 'success'}),
    };

    return response;
};
var mysql=require('mysql'); var pool=mysql.createPool({ 主持人:"ahost",, 用户:“auser”, 密码:“apassword”, 数据库:“adb”, 港口:3306 }); exports.handler=异步(事件、上下文)=>{ let request=JSON.parse(event.body); 让question=request.question; 让我们来回答; 设sId=request.sId; 让questionnaireId=request.questionnaireId; 让hutk=request.hutk; 让questionId=question.question.id; pool.getConnection((错误,连接)=>{ 如果(错误)抛出错误; 让值=[]; if(Array.isArray(已应答)){ 设i=0; while(i在运行两个查询中的一个查询时(或之前),您可能遇到并发出释放池连接的问题

创建池后,无需显式调用
getConnection
。更重要的是,如果您有查询可以并行执行的代码(正如您在这里所做的),那么您必须非常明智地管理连接,并且只有在确定将使用它的所有查询都已完成后才释放它

请在此处阅读更多信息:()

考虑尝试以下方法:

var mysql = require('mysql');

var pool = mysql.createPool({
  host: 'ahost',
  user: 'auser',
  password: 'apassword',
  database: 'adb',
  port: 3306
});

pool.on('connection', function (connection) {
  console.log('Pool id %d connected', connection.threadId);
});

pool.on('enqueue', function () {
  console.log('Waiting for available connection slot');
});

exports.handler = async (event, context) => {
  let request = JSON.parse(event.body);
  let question = request.question;
  let answered = question.answered;
  let sId = request.sid;
  let questionnaireId = request.questionnaireId;
  let hutk = request.hutk;
  let questionId = question.question.id;

  let values = [];
  if (Array.isArray(answered)) {
    let i = 0;
    while (i < answered.length) {
      let td = [
        questionnaireId,
        sId,
        questionId,
        answered[i],
        hutk
      ];
      values.push(td);
      i++;
    }
  }
  else {
    let td = [
      questionnaireId,
      sId,
      questionId,
      answered,
      hutk
    ];
    values.push(td);
  }

  let delete_query = "DELETE FROM answers WHERE sId= ? AND `key` = ?";
  pool.query(delete_query, [sId, questionId], function(err, result) {
    if (err) throw err;
  });

  let insert_query = "INSERT INTO answers (qId, sId, `key`, value, hutk) VALUES ?";
  pool.query(insert_query, [values], function(err, result) {
    if (err) throw err;
    console.log("Successfull Insert")
  });

  // TODO implement
  const response = {
    statusCode: 200,
    headers: {
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Credentials': true
    },
    body: JSON.stringify({
      message: 'success'
    }),
  };

  return response;
};
var mysql=require('mysql'); var pool=mysql.createPool({ 主持人:"ahost",, 用户:“auser”, 密码:“apassword”, 数据库:“adb”, 港口:3306 }); pool.on('connection',函数(connection){ console.log('池id%d已连接',connection.threadId); }); on('enqueue',函数(){ log('等待可用的连接插槽'); }); exports.handler=异步(事件、上下文)=>{ let request=JSON.parse(event.body); 让question=request.question; 让我们来回答; 设sId=request.sId; 让questionnaireId=request.questionnaireId; 让hutk=request.hutk; 让questionId=question.question.id; 让值=[]; if(Array.isArray(已应答)){ 设i=0; while(i