LoginSignup
5
6

More than 3 years have passed since last update.

Node.jsのmodule.exportsの仕組みを理解する

Posted at

はじめに

こちらは、エンジニアの新たな学びキャンペーンに向けた記事となります。

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で実行します。

(*varletではなくconstで宣言しているので、厳密には変数ではなく定数です。)

main.js
const foo = require("./sub.js");// sub.jsからmodule.exportsで指定した変数を読み込み、変数fooに代入する

foo("bee");

// bee
sub.js
const hoge = function(bar){
    console.log(bar);
}

module.exports = hoge;  // main.jsからrequireされたら、hogeという変数を渡す

(実践) データベース接続用の関数を、別ファイルに配置する

app.jsにすべてのソースコードを書き込んでいた状態から、
app.jsdbConnect.jsの2つにソースコードを分割します。

リファクタリング前のソースコード

app.js
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);

リファクタリング後のソースコード

app.js
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);
dbConnect.js
const mysql = require("mysql");

const dbcn = mysql.createConnection({
    host:"localhost",
    user:"root",
    password:"1234",
    database:"idea"
})

module.exports= dbcn;

参考

Node.js + Express で作る Webアプリケーション 実践講座

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6