[A-00191] Node.js 入門
node.jsの入門用の記事です。これを参考に学習していただければと思います。
本記事は同時に自分の学習用でもあるため、興味の沸いた事しか書いてません。
少しずつ内容を増やしていこうと思います。
・とりあえずNode.jsで「Hello,world!」してみる
まずNode.jsでjavascriptの実行方法を確認するためHello,worldしてみます。
ソースコードは下記のみです。適当な場所に作成してください。
console.log("Hello,world!")
下記のコマンドで実行します。
node main.js
$ node main.js
Hello,world!
・JSでファイルを読み込んでみる
ファイル読み込みを行います。
適当なテキストファイルを作成します。
これはjavascriptでファイルを読み込むテストです。
.jsファイルは以下の通りです。
const fs = require('fs');
let text = fs.readFileSync('test.txt', 'utf-8');
console.log(text);
下記で実行します。
node main.js
$ node main.js
これはjavascriptでファイルを読み込むテストです。
・ファイル書き込みを行う
プログラムはこちら
const fs = require('fs');
let text = "この内容をファイルに書き出します。";
fs.writeFileSync('testWrite.txt', text, (err) => {
if (err) throw err;
});
console.log("ファイル書き込み完了.");
実行結果はこちら
$ node main.js
ファイル書き込み完了.
この内容をファイルに書き出します。
・ クラスを作成してみる
クラスファイルを作成してみます。
ディレクトリ構造は下記の通りです。

module.exports = class Person {
constructor(name, age, country) {
this.name = name;
this.age = age;
this.country = country;
}
sayHello() {
console.log(`Hello, my name is ${this.name}.`);
console.log(`I'm ${this.age} years old.`);
console.log(`I'm live in ${this.country}.`);
}
}
const personClass = require("./person");
let p = new personClass("satoshi", 14, "Japan");
p.sayHello();
実行したら下記の通りになります。
$ node main.js
Hello, my name is satoshi.
I'm 14 years old.
I'm live in Japan.
・クラスをextendsしてみる
作成したPersonクラスをextendsして別のクラスを作成してみます。
ディレクトリ構成は下記の通りです。

class Person {
constructor(name, age, country) {
this.name = name;
this.age = age;
this.country = country;
}
sayHello() {
console.log(`Hello, my name is ${this.name}.`);
console.log(`I'm ${this.age} years old.`);
console.log(`I'm live in ${this.country}.`);
}
}
module.exports = { Person };
const { Person } = require("./iface/person");
module.exports = class BusinessPerson extends Person {
constructor(name, age, country, job) {
super(name, age, country);
this.job = job
}
sayHello() {
super.sayHello();
console.log(`I'm work as ${this.job}.`);
}
}
const BusinessPerson = require("./business_person");
let bzp = new BusinessPerson("satoshi", 14, "Japan", "Student");
bzp.sayHello();
実行したら下記の通りとなります。
$ node main.js
Hello, my name is satoshi.
I'm 14 years old.
I'm live in Japan.
I'm work as Student.
[DB接続]
・データを取得してみる(MySQL)
mysqlからデータをselectしてみます。
まずnpmでmysqlパッケージをnodeにインストールします。
npm install mysql
npm upgrade mysql
上記を実行したらmysqlをスタートしておきます。
$ mysql.server start
Starting MySQL
..... SUCCESS!
mysqlには下記のdatabaseとtableがあるものとします。
+--------------------+
| Database |
+--------------------+
| employee_db |
+--------------------+
+-----------------------+
| Tables_in_employee_db |
+-----------------------+
| users |
+-----------------------+
使用するユーザーはなんでも構いませんのでrootにします。passwordは[password]です。mysql8を使用する場合下記の処理が必要になるかもしれません。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
flush privileges;
mysql> SELECT user, host, plugin FROM mysql.user;
mysqlには問題なく接続できるという前提で下記のコードを実装します。
const mysql = require('mysql')
const conn = mysql.createConnection({
host:'localhost',
user:'root',
password:'password',
database:'employee_db'
})
conn.connect((err) => {
if (err) {
console.log('error connecting:' + err.stack);
return;
}
console.log('connecting success');
});
conn.query('SELECT * FROM users', (error, resultSet) => {
console.log(resultSet);
})
実行すると下記の通りになります。selectされたデータは環境によって異なるため、表示されればOKです。
$ node select_data_main.js
connecting success
[
RowDataPacket {
id: 1,
department_id: '1',
email: 'johnson.smarty@gmail.com',
first_name: 'Johnson',
last_name: 'Smarty'
},
RowDataPacket {
id: 2,
department_id: '2',
email: 'h.midway@gmail.com',
first_name: 'Hardy',
last_name: 'Midway'
},
RowDataPacket {
id: 3,
department_id: '4',
email: 'v.wood@example.com',
first_name: 'ViVian',
last_name: 'Westwood'
},
RowDataPacket {
id: 4,
department_id: '2',
email: 'bb@gmail.com',
first_name: 'Basis',
last_name: 'Brook'
}
]
・データを追加してみる(MySQL)
次にデータを追加する実装です。
const mysql = require('mysql')
const conn = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'employee_db'
});
conn.connect((err) => {
if (err) {
console.log('connection failed. ' + err.stack);
return;
}
console.log('connection success.');
});
conn.query('INSERT INTO users(id, department_id, email, first_name, last_name) VALUES (?,?,?,?,?)'
, [5, '1', 'example@gmail.com', 'J.M', 'Weston'], (error, results) => {
console.log(results);
})
実行すると下記に通りになります。
$ node insert_data_main.js
connection success.
OkPacket {
fieldCount: 0,
affectedRows: 1,
insertId: 5,
serverStatus: 2,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0
}
・レコードを更新してみる(MySQL)
次にレコードを更新してみます。
const mysql = require('mysql')
const conn = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'employee_db'
});
conn.connect((err) => {
if (err) {
console.log('connection failed.' + err.stack());
return;
}
console.log('connection success.');
})
conn.query('UPDATE users SET email=? where id=?',
['sample@gmail.com', 5], (error, results) => {
console.log(results);
}
);
console.log('updating data complited.');
実行結果はこちら
$ node update_data_main.js
updating data complited.
connection success.
OkPacket {
fieldCount: 0,
affectedRows: 1,
insertId: 0,
serverStatus: 2,
warningCount: 0,
message: '(Rows matched: 1 Changed: 1 Warnings: 0',
protocol41: true,
changedRows: 1
}
・レコードを削除してみる(MySQL)
次にレコードを削除してみたいと思います。
const mysql = require('mysql')
const conn = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'employee_db'
});
conn.connect((err) => {
if (err) {
console.log('connection establish is failed.' + err.stack());
return;
}
console.log('connection established.');
});
conn.query('DELETE FROM users WHERE id=?',
[5], (error, results) => {
console.log(results);
}
);
console.log('deleting data is success.');
実行結果は下記の通りです。
$ node delete_data_main.js
deleting data is success.
connection established.
OkPacket {
fieldCount: 0,
affectedRows: 1,
insertId: 0,
serverStatus: 2,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0
}
・PostgreSQLに接続して参照してみる(PostgreSQL)
今度はpostgreSQLを使用して参照をしてみます。
Node.jsでPostgresSQLを使用するためのライブラリをインストールします。
npm install pg
npm upgrade pg
postgresSQLのセットアップは終わっているものとします。
const { Client } = require('pg')
const client = new Client({
user: 'postgres',
host: 'localhost',
database: 'employee_db',
password: 'postgres',
port: 5432
})
client.connect();
const query = {
text: 'SELECT * FROM users'
};
client.query(query, (err, res) => {
if (err) {
console.log(err.stack());
} else {
for (const row of res.rows) {
console.log(row);
}
}
})
実行結果は下記となります。
$ node select_data_main.js
{
id: 1,
email: 'sample@gmail.com',
first_name: 'scott',
last_name: 'hamilton'
}
{
id: 2,
email: 'example@gmail.com',
first_name: 'John',
last_name: 'Muffy'
}
・レコードを登録してみる(PostgresSQL)
次にレコードを登録してみます。
const { Client } = require('pg')
const client = new Client({
user: 'postgres',
host: 'localhost',
database: 'employee_db',
password: 'postgres',
port: 5432
});
client.connect();
const query = {
text: 'INSERT INTO users(id, email, first_name, last_name) VALUES($1, $2, $3, $4)',
values: [3, 'fredrickson@gmail.com', 'fred', 'hopkins'],
};
client.query(query, (err, res) => {
if (err) {
console.log(err.stack());
return;
}
console.log("insert success.");
});
実行結果は下記の通りです。
$ node insert_data_main.js
insert success.
・レコードを更新してみる(PostgresSQL)
次にレコードを更新してみます。
const { Client } = require('pg')
const client = new Client({
user: 'postgres',
host: 'localhost',
database: 'employee_db',
password: 'postgres',
port: 5432
});
client.connect();
const query = {
text: 'UPDATE users SET email=$1 WHERE id=$2',
values: ['babapapa@gmail.com', 3],
};
client.query(query, (err, res) => {
if (err) {
console.log(err.stack());
return;
}
console.log('update success.');
});
実行結果はこちら
$ node update_data_main.js
update success.
・レコードを削除してみる(PostgresSQL)
次にレコードを削除してみます。
const { Client } = require('pg')
const client = new Client({
user: 'postgres',
host: 'localhost',
database: 'employee_db',
password: 'postgres',
port: 5432
})
client.connect();
const query = {
text: 'DELETE FROM users WHERE id=$1',
values: [3],
};
client.query(query, (err, res) => {
if (err) {
console.log(err.stack());
return;
}
console.log('delete success.');
console.log(res);
});
実行結果はこちら
$ node delete_data_main.js
delete success.
Result {
command: 'DELETE',
rowCount: 1,
oid: null,
rows: [],
fields: [],
_parsers: undefined,
_types: TypeOverrides {
_types: {
getTypeParser: [Function: getTypeParser],
setTypeParser: [Function: setTypeParser],
arrayParser: [Object],
builtins: [Object]
},
text: {},
binary: {}
},
RowCtor: null,
rowAsArray: false,
_prebuiltEmptyResultObject: null
}
Appendix
参考ドキュメントはこちら
https://qiita.com/shirokuman/items/509b159bf4b8dd1c41ef
https://stackoverflow.com/questions/49854811/class-extends-value-object-is-not-a-constructor-or-null
https://qiita.com/roomberry/items/71b1f9e7900cdee05f55
https://zenn.dev/ojk/articles/js-interface
https://www.geeksforgeeks.org/implementing-interfaces-in-javascript
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Classes
https://qiita.com/IwashiMorino/items/41f1548bff0f27082ecc
https://qiita.com/harukin721/items/99c606364a012cceb0d8
https://prog-8.com/docs/nodejs-mysql
https://qiita.com/PianoScoreJP/items/7ed172cd0e7846641e13
https://qiita.com/yanbou893/items/a46b37f002df8529c99c
https://www.sejuku.net/blog/81358
コメントを残す