在AWS上使用mysql-npm运行mysql查询
running a mysql query using mysql-npm on AWS
嗨,伙计们,我有一个问题,我真的不知道该怎么解决。这也有点奇怪:/基本上,我已经创建了这个Lambda函数,使用节点包"mysql"连接到mysql数据库。
如果我在电脑的命令行中使用命令"sls function run function1"运行该函数,并进行不同的查询,一切都很好。但是,当我使用链接从web浏览器调用该函数时,我必须刷新页面两次才能得到正确的结果,因为在第一次刷新时,服务器会用旧的结果进行响应。
我注意到,在命令行中,我总是有不同的thredID,而在Web浏览器中,thredID总是相同的。
此外,我不会关闭lambda函数代码中的连接,因为如果我从命令行运行函数,一切都很好,但从浏览器运行函数,我只能进行2次查询,然后我收到一条消息,说我不能使用关闭的连接。
因此,当我从web浏览器调用它时,它似乎存储了旧的查询结果。
很明显,我犯了同样愚蠢的错误,但我不知道如何解决。有人有主意吗?谢谢:)
'use strict';
//npm packages
var mysql=require('mysql');
var deasync = require('deasync');
//variables
var goNext=false; //use to synchronize deasync
var error=false; //it becomes TRUE if an error occured during the connection to the DB
var dataColumnTable; //the data thet you extract from the query to the DB
var errorMessage;
//----------------------------------------------------------------------------------------------------------------
//always same credentials
var connection = mysql.createConnection({
host : 'hostAddress',
user : 'Puser',
password : 'password',
port : '3306',
database : 'database1',
});
//----------------------------------------------------------------------------------------------------------------
module.exports.handler = function(event, context) {
var Email=event.email;
connection.query('SELECT City, Address FROM Person WHERE E_Mail=?', Email, function(err, rows) {
if(err){
console.log("Cannot connect to DB");
console.log(err);
error=true;
errorMessage=err;
}
else{
console.log("data from column acquired!");
dataColumnTable=rows;
}
//connection.end(function(err) {
// connection.destroy();
//});
//console.log("Connection closed!");
goNext=true;
});
require('deasync').loopWhile(function(){return goNext!=true;});
//----------------------------------------------------------------------------------------------------------------
if(error==true)
return callback('Error '+ errorMessage);
else
return callback(null,dataColumnTable); //return a JsonFile
//fine headler
};
免责声明:我不太熟悉AWS和/或AWS Lambda。
http://docs.aws.amazon.com/lambda/latest/dg/programming-model-v2.html状态(重点矿):
Lambda函数代码必须以无状态风格编写,并且与底层计算基础设施没有关联。您的代码应该期望本地文件系统访问、子进程和类似工件被限制在请求的生存期内。持久状态应该存储在AmazonS3、AmazonDynamoDB或其他云存储服务中。要求函数是无状态的,使AWS Lambda能够根据需要启动尽可能多的函数副本,以适应事件和请求的传入速率。从一个请求到另一个请求,这些函数可能并不总是在同一个计算实例上运行,并且您的Lambda函数的给定实例可能会被AWS Lambda多次使用。
打开一个连接并将其存储在处理程序函数外部的变量中就是状态。连接可能会在请求之间关闭,甚至在您第一次请求之前关闭。您的lambda函数可能会被重用(因此线程ID相同)。
我的假设是(并试图解决这个问题),您需要在每个请求上创建连接(即,在您的处理程序中),并且可能不希望任何值像上次请求那样初始化。(可能除了常数)。
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 添加行并运行多个mySQL查询
- 使用 jQuery 从运行 MySQL 的 PHP 脚本返回信息
- 如何使用 JavaScript 运行 MySQL 查询
- 节点.js MYSQL,在前一个查询完成后按顺序运行每个查询
- 在 mysql 启动上运行一些脚本
- 如果网站刷新,则阻止 php 调用的 mysql 服务器运行
- 无法使用Node.js中的多个用户定义变量运行MYSQL查询
- 带有where子句的Insert语句不会在nodejs-mysql上运行
- 使用下拉菜单运行mysql查询
- 我如何使用jQuery运行MySQL查询
- jQuery AJAX代码运行,但MySQL帖子不会被删除
- 当JQuery滑块中的值发生变化时,运行MySQL查询
- Express-mysql-session阻止passport deserializeUser运行
- 从javascript运行循环保存到Mysql
- 使用javascript在MySQL查询中运行select选项
- 如何根据输入框运行MySQL查询
- 当点击类似Facebook的按钮时,使用Ajax通过PHP运行MySQL查询
- 使用mysql表中的凭据来运行javascript脚本
- 在AWS上使用mysql-npm运行mysql查询