我在Amazon Lambda中運行nodejs函數。它應該在HTTP獲取後向MySQL DB插入。一切似乎都很好 - 看着cloudwatch日誌查詢正確解析,如果我複製粘貼查詢到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();
的問題是,拉姆達版本根本什麼都不做。查詢是可見和正確的,並且該函數乾淨地返回,但它從不實際插入任何東西。我也有與更新查詢相同的問題,但所有的MySQL選擇工作和返回的東西,所以問題不是這樣。當我在我的機器上運行它時,插入也可以工作 - 當我將它推到lambda時,問題就會出現。
我試圖添加一個單獨的提交語句,但無法讓它工作。我顯然錯過了一些東西,但無法弄清楚什麼。我需要有更新的交易區塊嗎?
編輯:Per Mark B的請求。我想我只是通過顯示部分代碼來嘗試變得比我更聰明。整個邏輯是:
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"})
};
根據這裏給出的建議,我做了以下更改。我把最後一個回調消除了,並且在這兩個connection.queries裏都做了回調:
var query = connection.query('insert into other_table select * from products where product_id = ?;',
[parameters],
function(err,result){
callback({"ok":"ok"})
});
而且它似乎工作。我現在猜測,commit -part什麼都不做,但它似乎也沒有破壞它。在這一點上可能很明顯,我不是一個開發人員,對node.js也不那麼熟悉,所以我真的很感謝我的幫助!
你能顯示你的完整代碼嗎? –