Я запускаю функцию nodejs в Amazon Lambda. Предполагается сделать вставку в mysql DB после HTTP-получения. Кажется, что все в порядке - глядя на журналы облачного прослушивания, запрос анализируется правильно, и если я скопирую запрос в консоль mysql, он сделает именно то, что он должен.Вкладки Mysql с AWS Lambda + Node.js
По существу:
var mysql = require('mysql')
var connection = createConnection({ connection details });
connection.connect();
var query = connection.query('Insert into AAA select * \
from BBB where BBB.a = ?;', [parameter],
function(err, result) {}
);
connection.end();
Проблема в том, что версия Lambda просто ничего не делает. Запрос виден и корректен, и функция возвращает чисто, но он никогда ничего не вставляет. У меня такая же проблема с запросом на обновление, но все mysql выбирает работу и возвращает материал, поэтому проблема не в этом. Вставка также работает, когда я запускаю ее на своей машине - когда я нажимаю ее на лямбда, проблема возникает.
Я попытался добавить отдельный оператор фиксации, но не смог заставить его работать. Я явно что-то пропустил, но не могу понять, что. Нужно ли иметь блок транзакций для обновлений?
РЕДАКТИРОВАТЬ по запросу Бр. Я думаю, что я старался быть умнее, чем я, показывая только часть кода. Вся логика:
exports.handler = function(event, context, callback){
if (event.A == -1){
exports.updateDB(event, function(res) {
context.succeed(res)
}
}
};
exports.updateDB = function(event, callback) {
var mysql = require('mysql')
var connection = createConnection({ connection details });
connection.connect();
var query = connection.query('update products set A=? where product_id = ?;',
[parameters],
function(err,result){ });
var query = connection.query('insert into other_table select * from products where product_id = ?;',
[parameters],
function(err,result){ });
connection.commit(function(err) {
if(err) {
connection.rollback(function() {
throw(err);
});
}
connection.end();
});
callback({"ok":"ok"})
};
По рекомендации, приведенной здесь, я внесла следующие изменения. Я снял последний обратный вызов и поставил обратные вызовы внутри обоих соединений. 0:
var query = connection.query('insert into other_table select * from products where product_id = ?;',
[parameters],
function(err,result){
callback({"ok":"ok"})
});
И, похоже, сработает. Теперь я предполагаю, что команда фиксации ничего не делает, но она, похоже, тоже не сломает ее. Вероятно, на данный момент очевидно, что я не разработчик и даже менее знакомый с node.js, поэтому я по-настоящему ценю помощь, которую я получил!
Вы можете показать весь код? –