Expressシリーズ久々に再開です。以前、静的なHTMLファイルを表示するWebサーバを立てました。今回からデータベース編です。少し前にMySQLやMongoDBにターミナルから接続しましたが、今回はExpressから接続したく思います。それではいきましょう!
【目次】
※参考:前回記事
【Express】静的HTMLファイルの表示(res.sendFile()、express.static()) - クモのようにコツコツと
※参考:Node.js / Expressを習得するためにやったことまとめ
qiita.com
データベースのおさらい
MySQLにターミナルからCRUDしてみた。
※参考:【SQL】ターミナルからMAMPのMySQLにCRUDする - クモのようにコツコツと
MongoDBもターミナルからCURDしてみた。
※参考:【NoSQL】ターミナルからMongoDBにCRUDする(JS & JSONライク!) - クモのようにコツコツと
今回はExpressからデータベースに接続してみたい。
MySQLへの接続
まずはMAMPのMySQLに接続する。参考にさせていただいた記事。
※参考:Express database integration
※参考:Express.js(node.js)からMySQLへの接続とCRUD操作 | アールエフェクト
Expressのインストール
まず「express_mysql」フォルダを作成し、cd
コマンドで移動
cd /(パス)/express_mysql
npmのpackage.jsonを作成
npm init -y
Expressのインストール
npm install express --save
Expressのインストールの詳細はこちら
※参考:Express事始め(インストール〜ハローワールドまで) - クモのようにコツコツと
Node.jsを常時監視するモジュール「nodemon」(ドラえもんみたいな名前w)も入れてみる。
npm install nodemon -g
これは今後も使うのでグローバルにインストールした(以降はインストール不要)
※参考:nodemon
nodemonはgulpでいうwatch()
メソッドみたいな位置づけ。
※参考:【Gulp】watch()メソッドでSass(SCSS)を自動コンパイル - クモのようにコツコツと
MySQLをインストール
次にMySQLのモジュールをインストール
npm install mysql
これはDB本体ではなく、Node.jsでmysqlを使えるようにするモジュール。
index.jsを作成する。MAMPを起動していない場合は起動する。
index.jsをnodemonから起動し、監視する。
nodemon index.js
これで修正内容がサーバに反映される。
JSコード
index.jsのコード
const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'root', database: 'beatles', port: 8889 }); connection.connect(); connection.query('SELECT id, name, part FROM member', (err, result) => { if (err) throw err; console.log(result); }); connection.end();
- 変数
mysql
でmysql
モジュールをインポート - 変数
connection
でmysql.createConnection()
を実行
引数は無名関数でMAMPのデータベースの接続情報 connection.connect()
を実行、データベースに接続connection.query()
を実行、第一引数はSQL文のSELETCT
文
第二引数は無名関数で引数は左からerr
,result
もしerr
だったら処理を抜ける
コンソールに結果result
を表示するconnection.end()
で接続を終える
connection.query()
の第一引数でSQL文を直接書いている。
なお、connection
のMAMPのDBの接続情報はこちらのページで確認できる。
http://localhost:8888/MAMP/?language=English
ポート番号8889
も書かないとエラーになった。
※参考:NodeJSでMAMPのMySQLにアクセスする。 | 俺日記
結果の表示
index.jsを保存するとターミナルのコンソールに下記の結果が表示された!
[ RowDataPacket { id: 1, name: 'ジョン・レノン', part: 'ギター' }, RowDataPacket { id: 2, name: 'ポール・マッカートニー', part: 'ベース' }, RowDataPacket { id: 3, name: 'ジョージ・ハリスン', part: 'ギター' }, RowDataPacket { id: 6, name: 'リンゴ・スター', part: 'ドラム' } ]
MySQLのデータベースはテーブル形式だが、返された結果はJSON形式になっている!!
ソースコード
※参考:GitHub - ryo-i/express_mysql: ExpressでMySQLに接続
MongDBへの接続
次はNoSQLのデータベース「MongoDB」に接続してみる。参考にした記事
※参考:Express database integration
mongodbをインストール
「express_mongdb」というフォルダを作る。Expressのインストール〜nodemonの起動までは同じ流れ。
mongodbモジュールのインストール(MySQLと同じくDB本体ではない)。
npm install mongodb
index.jsを作成し、nodemonで監視する
nodemon index.js
JSコード
index.jsのコード
const MongoClient = require('mongodb').MongoClient; const url = 'mongodb://localhost:27017/beatles'; const connectOption = { useUnifiedTopology: true } MongoClient.connect(url, connectOption, (err, client) => { if (err) throw err; const db = client.db('beatles'); db.collection('member').find().toArray((err, result) => { if (err) throw err; console.log(result); }); });
- 変数
MongoClient
でmongodb
のMongoClient
をインポート - 変数
url
でデータベースbeatles
のURLを設定 - 変数
connectOption
でオプション(useUnifiedTopology
をtrue
)を設定 MongoClient.connect()
を実行、引数は左からurl
、connectOption
、無名関数(引数は左からerr
,client
もしエラーなら処理を抜ける
変数db
でclient.db()
を実行、引数はbeatles
db.collection()
を実行(引数はmember
)、find()
でデータを表示、
toArray()
で配列形式に、引数は無名関数で無名関数の引数はerr
,result
もしエラーなら処理を抜ける
コンソールに結果result
を表示
元々のMongoDBの書き方がJSライクのため、自然に馴染んでいる。
find()
の後につないでいるtoArray()
はデータを配列形式にして返すメソッド。
※参考:https://docs.mongodb.com/manual/reference/method/cursor.toArray/
connectOption
のオプション値(useUnifiedTopology
をtrue
)を加えないとこの警告文が出る。
(node:42192) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
(ノード:42192)DeprecationWarning:現在のサーバー検出および監視エンジンは非推奨であり、将来のバージョンでは削除される予定です。 新しいサーバー検出および監視エンジンを使用するには、オプション{useUnifiedTopology:true}をMongoClientコンストラクターに渡します。
オプションの加え方は下記が参考になった。
※参考:【2019年版】Node.js + MongoDBでデータベース接続をする【Mac環境】 - Qiita
結果の表示
index.jsを保存するとターミナルのコンソールに下記の結果が表示された。
[ { _id: 5f2b28d7bab508003e3acfe5, name: 'ジョン・レノン', part: 'ギター' }, { _id: 5f2b28e5bab508003e3acfe6, name: 'ポール・マッカートニー', part: 'ベース' }, { _id: 5f2b28ebbab508003e3acfe7, name: 'ジョージ・ハリスン', part: 'ギター' }, { _id: 5f2b3784bab508003e3acfea, name: 'リンゴ・スター', part: 'ドラム' } ]
前回のターミナルからのCRUDとは少し書式が違うが、やはりJSON形式になっている!
ソースコード
※参考:GitHub - ryo-i/express_mongdb: ExpressにMongoDBで接続
最後に
ということでExpressからMySQLとMongoDBに接続できました。MySQLの操作はSQL文を書きましたが、返ってくるデータはJSON形式でした!MongoDBの操作はJSライクなのでやはり馴染んでますねw
今はまだデータを読み込んでターミナル(コンソール)に表示するのみですが、ブラウザと連携してCRUD操作もやってみたく。また、MySQLの操作をSQL文ではなくJSでできるORMツール「Sequelize」も使ってみたく思っています。
それではまた!
※参考:Node.js / Expressを習得するためにやったことまとめ
qiita.com