【Node.js】AWS Lambda에서 MySQL(AWS RDS)의 레코드 개수를 취득
환경 및 시스템 구성
· node.js v14.5.0
・AWS Lambda로부터 AWS RDS(MySQL)의 정보를 취득
방법
SQL 문에서 테이블의 수를 가져올 때,
예를 들어, users 테이블의 컬럼 userID 수를 얻으려면 다음 SQL 문이 있습니다.
SELECT COUNT(*) from users where userId ='userID';
이것을 Lambda에 node.js로 쓰면
index.js
'use strict';
const mysql = require('mysql');
exports.handler = function (event, context) => {
const connection = mysql.createConnection({
host : 'xxxx.xxxxxxx.ap-northeast-1.rds.amazonaws.com', //RDSのエンドポイント
user : 'admin', //MySQLのユーザ名
password : 'xxxxx', //MySQLのパスワード
database : 'xxxxx' //データベース名
});
let sql = "SELECT COUNT(*) from users where userId = '"+userId+"';";
connection.query( sql, function(err, rows, fields) {
if (err) throw err;
console.log(rows);
});
}
행에 숫자가 저장되어 있어야하지만,
콘솔에
[ [RowDataPacket] ]
뭔가 잘 모르기 때문에,
console.log(rows[0]);
그렇다면
RowDataPacket { 'COUNT(*)': 1 }
이 'COUNT(*)'의 값을 얻으려고 생각하면,
console.log(rows[0].RowDataPacket.COUNT(*));
그러나 이것은 문법 오류입니다.
SyntaxError: Unexpected token '*'
어떻게 하면 돼.
SQL문의 COUNT(*) 뒤에 As count 를 넣으면 됩니다.
SELECT COUNT(*) AS count from users where userId ='userID';
오, 뭔가 좋은 느낌이되었습니다.
RowDataPacket { count: 1 }
그러나 사실 이것은 JSON처럼 보이지만 JSON은 아닙니다.
RowDataPacket으로 나오면,
JSON.stringify()에서,
JSON으로 변환해야합니다.
console.log(JSON.stringify(rows[0]));
오, 좋은 느낌.
{
"count": 1
}
이것으로 어때!
console.log(JSON.stringify(rows[0]).count);
라고 생각하면, 저기?
undefined
사실,
일단 parse 하지 않으면 안됩니다.
console.log(JSON.parse(JSON.stringify(rows[0])).count);
드디어 수치를 취할 수 있었습니다.
1
요약하면 이것이 정답입니다.
index.js
'use strict';
const mysql = require('mysql');
exports.handler = function (event, context) => {
const connection = mysql.createConnection({
host : 'xxxx.xxxxxxx.ap-northeast-1.rds.amazonaws.com', //RDSのエンドポイント
user : 'admin', //MySQLのユーザ名
password : 'xxxxx', //MySQLのパスワード
database : 'xxxxx' //データベース名
});
let sql = "SELECT COUNT(*) AS count from users where userId = '"+userId+"';";
connection.query( sql, function(err, rows, fields) {
if (err) throw err;
console.log(JSON.parse(JSON.stringify(rows[0])).count);
});
}
추기 (실은 더 간단한 방법이・・・)
여기까지 읽어 주셔서 감사합니다.
실은, 이런 귀찮은 일을 하지 않아도, 간단한 방법이 있었습니다!
트위터로, 친절한 분이 가르쳐 주었습니다.
rows[n]로 1개의 객체가 되어 있으므로, 단순히 rows[0].count 또는 rows[0]["count(*)"]로 갈 수 있어요! - masaki ohashi (@ohashimasaki) June 17, 2021
이것입니다.
console.log(rows[0].count);
즉,
index.js
'use strict';
const mysql = require('mysql');
exports.handler = function (event, context) => {
const connection = mysql.createConnection({
host : 'xxxx.xxxxxxx.ap-northeast-1.rds.amazonaws.com', //RDSのエンドポイント
user : 'admin', //MySQLのユーザ名
password : 'xxxxx', //MySQLのパスワード
database : 'xxxxx' //データベース名
});
let sql = "SELECT COUNT(*) AS count from users where userId = '"+userId+"';";
connection.query( sql, function(err, rows, fields) {
if (err) throw err;
console.log(rows[0].count);
});
}
아니-, 도대체 나는 무엇을 하고 있어라···.
라고 해도 시행착오는 중요합니다.
라고 자신에게 말하게 합니다.
참고 사이트
Reference
이 문제에 관하여(【Node.js】AWS Lambda에서 MySQL(AWS RDS)의 레코드 개수를 취득), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tatsuya1970/items/261c7e9cf3e87b8db55f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)