[Udemy] Introducing Node
TheUltimate MySQL Bootcamp 16強を勉強してまとめた内容です
ベスト16ではノードjsとMySQLで簡単なWebアプリケーション(JOINUS)を実現します.
A Startup Mailing List Application
: collecting people's emails to send updates or invite them Web App features inserting email data select total counts of email data Node package
NodeJSのMySQLパッケージをインストールし、NodeとMySQLに接続し、Fakerパッケージをインストールし、500通以上のランダムユーザー電子メールを生成し、DBに追加します.
🔍 MySQLに直接日付を入力し、MySQLとは異なる形式で保存すると、次のエラーが発生します.
🔍 fakerパッケージ
上図に示すように、MySQLパケットを介してMySQL DBにデータを追加する場合、渡されるcreated atデータ型はDBに格納されているデータ型とは異なるが、パケット自体を文字列に変換して転送することで、適切にDBにデータを追加することができる.
この内容はmysqljs/mysqlで確認できます.
🔍 次のデータをクエリーするクエリー文を作成します.
ベスト16ではノードjsとMySQLで簡単なWebアプリケーション(JOINUS)を実現します.
JOIN US
A Startup Mailing List Application
: collecting people's emails to send updates or invite them
withshepherd/faker
( faker
has been deleted for some reason. use npm install @withshepherd/faker
instead) mysql
NodeJSのMySQLパッケージをインストールし、NodeとMySQLに接続し、Fakerパッケージをインストールし、500通以上のランダムユーザー電子メールを生成し、DBに追加します.
NodejsとDBの接続
const faker = require("@withshepherd/faker");
const mysql = require("mysql");
const connection = mysql.createConnection({
host: "localhost",
user: process.env.USER,
password: process.env.PW,
database: process.env.DATABASE,
});
//예시
const query = "SELECT CURTIME() AS time, CURDATE() AS date, NOW() AS now";
connection.query(query, function (err, results, fields) {
if (err) throw err;
console.log("The solution is: ", results[0]);
});
connection.end();
テーブルの作成
//schema.sql
//source /schema.sql
CREATE TABLE users (
email VARCHAR(255) PRIMARY KEY,
created_at TIMESTAMP DEFAULT NOW()
);
データの追加(練習)
const person = {
email: '[email protected]'
};
const query = 'INSERT INTO users SET ?'
connection.query(query, function (err, results, fields) {
if(err) throw err;
console.log(results);
})'
connection.end();
//위의 쿼리문은 다음과 동일하다.
const query = 'INSERT INTO users (email) VALUES ('Jenny55@gmail.com')'
//faker를 사용해 동적으로 데이터 추가하기
const person = {
email: faker.internet.email(),
created_at: faker.date.past()
};
const query = 'INSERT INTO users SET ?';
connection.query(query, person, function(err, results, fields) {
if(err) throw err;
console.log(results);
});
データの追加(buckinsert,500個)
const data = [];
for(let i=0; i<500; i++){
data.push([
faker.internet.email(),
faker.data.past()
]);
}
//console.log(data);
/*
[
[ '[email protected]', 2021-07-09T05:43:47.154Z ],
[ '[email protected]', 2021-02-26T16:45:10.016Z ],
[ '[email protected]', 2021-05-15T14:43:03.037Z ],
[ '[email protected]', 2021-01-28T06:19:29.752Z ], ...
]
*/
const query = 'INSERT INTO users (email, created_at) VALUES ?';
connection.query(query, [data], function(err, results, fields) {
if(err) throw err;
console.log(results);
});
connection.end();
日付データについて、
🔍 MySQLに直接日付を入力し、MySQLとは異なる形式で保存すると、次のエラーが発生します.
INSERT INTO (email, created_at) VALUES ('[email protected]','MON')
🔍 fakerパッケージ
faker.date.past()
によって作成された日付も、上記の例でMySQLに格納されているフォーマットとは異なります.mysqlパッケージがクエリー文を送信してもエラーが発生しますか?const person = {
email: faker.internet.email(),
created_at: faker.date.past(),
};
console.log(person);
//{ email: '[email protected]', created_at: 2022-01-06T17:23:52.418Z }
const query = "INSERT INTO users SET ?";
const res = connection.query(query, person, function (err, results, fields) {
if (err) throw err;
console.log(results);
});
console.log(res.sql);
//INSERT INTO users SET `email` = '[email protected]', `created_at` = '2021-09-22 15:42:48.828'
上図に示すように、MySQLパケットを介してMySQL DBにデータを追加する場合、渡されるcreated atデータ型はDBに格納されているデータ型とは異なるが、パケット自体を文字列に変換して転送することで、適切にDBにデータを追加することができる.
この内容はmysqljs/mysqlで確認できます.
Quick Check
🔍 次のデータをクエリーするクエリー文を作成します.
SELECT
DATE_FORMAT(min(created_at), '%M %D %Y')
AS earliest_date
FROM users;
SELECT *
FROM users
WHERE created_at = (SELECT MIN(created_at) FROM users);
SELECT
MONTHNAME(created_at) AS month,
count(*) AS count
FROM users
GROUP BY month
ORDER BY count;
SELECT
count(*) AS yahoo_users
FROM users
WHERE email LIKE '%@yahoo.com';
SELECT
CASE
WHEN email LIKE '%@gmail.com%' THEN 'gmail'
WHEN email LIKE '%@yahoo.com%' THEN 'yahoo'
WHEN email LIKE '%@hotmail.com%' THEN 'hotmail'
ELSE 'other'
END AS provider,
COUNT(*) as total_users
FROM users
GROUP BY provider
ORDER BY total_users DESC;
Reference
この問題について([Udemy] Introducing Node), 我々は、より多くの情報をここで見つけました https://velog.io/@kaitlin_k/Udemy-Introducing-Nodeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol