【发布时间】:2020-01-02 20:30:57
【问题描述】:
我正在编写此代码以在 AWS Lambda 中运行。
查看mysql连接文档
如果一切正常且没有错误,我希望收到消息“数据库连接成功!” 然后得到一条消息“connected as id”,但这不是它发生的顺序。这是我的代码。
'use strict';
let mysql = require('mysql');
const connection = mysql.createConnection({
dateStrings: true,
host : process.env.rds_host,
user : process.env.rds_user,
password : process.env.rds_password,
database : process.env.rds_database,
port : process.env.rds_port
});
exports.handler = (event, context, callback) => {
//prevent timeout from waiting event loop
context.callbackWaitsForEmptyEventLoop = false;
let sql = 'SELECT * FROM company ORDER BY points DESC, name ASC';
let data = null;
console.log('\nGetCompanies SQL: ', sql);
let responseBody = "";
let statusCode = 0;
connection.connect(function(err) {
if (err) {
statusCode = 500;
responseBody = err;
}
else{
console.log("Database connected successfully!");
statusCode = 200;
responseBody = "Database connected successfully!";
}
});
console.log('connected as id ' + connection.threadId);
connection.query(sql, data, function(queryError, results) {
if(queryError) {
console.error(queryError.message);
callback(queryError);
}
else
{
console.log('\nGetCompanies Results: ', results[0]);
callback(null, results);
}
});
};
这是记录的输出:
信息
GetCompanies SQL: SELECT * FROM company ORDER BY points DESC, name ASC 2020-01-01T11:52:57.813Z
INFO connected as id null 2020-01-01T11:52:57.952Z
INFO 数据库连接成功! 2020-01-01T11:52:57.974Z
我的想法是我提供的功能:
connection.connect(function(err) {
将在connection.connect之后的任何代码之前执行。我这样想有错吗?
还有一个问题:为什么是
连接为 id null?我直接从mysql 文档中获得了该代码(connection.threadId)。
我知道这没什么大不了的,如果它影响的只是日志消息的顺序,但我还有其他功能我无法进行查询,因为连接还不存在。
当它吹过时会很混乱
if (err) {
statusCode = 500;
responseBody = err;
}
else{
<do some connection.query code here>
}
我把这些日志信息放在这里是因为这个方法有效,而我的其他方法无效。
【问题讨论】:
标签: mysql node.js aws-lambda