はじめに
こちらは、エンジニアの新たな学びキャンペーンに向けた記事となります。
Node.js + Express で作る Webアプリケーション 実践講座を参考にしながら、
module.exports
について理解を深めたことを記事にします。
実行環境
- Node.js v12.16.3
- Express 4.16.1
- 10.4.11-MariaDB
本記事の概要
私は今現在、Webアプリケーションの開発をしていますが、ある問題を抱えています。
その問題とは、1つのファイル内のソースコードが膨らみすぎて可読性が落ちているというものです。
これはデータベースへの接続、ミドルウェアの呼び出し、レスポンスの処理内容など、あらゆる情報をapp.js
内に書き込んでいることに由来します。
そこで、app.js
内のソースコードを削減することを目的に、
データベース接続を行う関数を別ファイルdbConnect.js
に記述し、
module.exports
を使ってそれをapp.js
から呼び出すようにリファクタリングしました。
本記事では、はじめにmodule.exports
について例題を用いて解説し、
その後で応用として、データベース接続用の関数をmodule.exports
を使って呼び出します。
対象のUdemy講座で学んだこと
対象の講座で学んだことのうち、特に本記事へと反映する内容は以下となります。
-
module.export
の使い方 -
require
の使い方
module.exportsとは
JavaScript(Node.js)において、
あるファイルに存在する変数や関数を、別のファイルで実行する機能です。
似たようなものにexports
がありますが、本記事では触れません。
(例) sub.js内の関数をmain.jsで実行する
sub.js
で宣言した変数をmain.js
で実行します。
(*var
やlet
ではなくconst
で宣言しているので、厳密には変数ではなく定数です。)
const foo = require("./sub.js");// sub.jsからmodule.exportsで指定した変数を読み込み、変数fooに代入する
foo("bee");
// bee
const hoge = function(bar){
console.log(bar);
}
module.exports = hoge; // main.jsからrequireされたら、hogeという変数を渡す
(実践) データベース接続用の関数を、別ファイルに配置する
app.js
にすべてのソースコードを書き込んでいた状態から、
app.js
とdbConnect.js
の2つにソースコードを分割します。
リファクタリング前のソースコード
const express = require("express");
const app = express();
const mysql = require("mysql");
const dbcn = mysql.createConnection({
host:"localhost",
user:"root",
password:"1234",
database:"idea"
})
app.set("view engine", "ejs");
app.get("/", (req, res)=>{
const sql = "select * from ideatext";
dbcn.query(sql, function (err, result, field){
if(err) throw err;
console.log(result);
res.render("index", {idea : result});
})
})
app.listen(3000);
リファクタリング後のソースコード
const express = require("express");
const app = express();
const mysql = require("mysql");
const dbcn = require("./dbConnect.js")
const connection = dbcn.dbcn;
app.set("view engine", "ejs");
app.get("/", (req, res)=>{
const sql = "select * from ideatext";
dbcn.query(sql, function (err, result, field){
if(err) throw err;
console.log(result);
res.render("index", {idea : result});
})
})
app.listen(3000);
const mysql = require("mysql");
const dbcn = mysql.createConnection({
host:"localhost",
user:"root",
password:"1234",
database:"idea"
})
module.exports= dbcn;