Practices of directory composition using expressjs
せっかく仕事でNode.js
(というかExpress
)使ってるので、そこで実現場での使い方の例を参考にメモする。(そのまんまだとあれなので、加工済み)
あと英語の勉強のため、何気にタイトルやらヘッダやらを英語にしています。
Anyway, directory structure
./ ├── app/ │ ├── app.js │ ├── server.js │ ├── routes.js │ │ │ ├── controllers/ │ ├── models/ │ ├── routes/ │ ├── modules/ │ │ ├── errors/ │ │ └── validators/ │ └── services/ │ ├── test │ ├── functional/ │ │ ├── controllers/ │ │ ├── models/ │ │ ├── modules/ │ │ └── services/ │ └── senario/ │ ├── config/ ├── logs/ └── node_modules/
How to use each file
app.js
アプリの全体的な定義を書いたもの。
// 利用するモジュール群の読み込み const hoge = require('hoge') const express = require('express ') const app = express() // ルーティングの定義 const route = require('./routes') // エラーハンドラの定義 const errorHandler = require('./services/error_handler') // 不要なヘッダの削除 app.disable('x-powerd-by') app.disable('etag') // キャッシュの無効化 app.use((req, res, next) => { res.setHeader('Cache-Control', 'no-cache') next() }) // リクエスト前のミドルウェア処理 app.use(hoge()) // ルーティング処理 // 今回の例では認証がいるもの、いらないもので分ける app.use('path_to_app', route.getNonAuthRoute()) app.use('path_to_app', route.getAuthRoute()) // エラーハンドリング app.use(errorHandler) module.exports = app
routes.js
文字通りルーティング処理を書いたもの。
const express = require('express') router = express.Router() // 各コントローラを読み込む const hogeController = require('./controllers/hoge') const fugaController = require('./controllers/fuga') const piyoController = require('./controllers/piyo') const mogeController = require('./controllers/moge') const getAuthRoute = (router) => { router.get('path_to_app1', hogeController.get) router.post('path_to_app2', fugaController.post) router.patch('path_to_app3', piyoController.patch) router.delete('path_to_app4', mogeController.delete) return router } module.exports.getAuthRoute = getAuthRoute const getNonAuthRoute = (router) => { router.get('path_to_app1', hogeController.get) router.post('path_to_app2', fugaController.post) router.patch('path_to_app3', piyoController.patch) router.delete('path_to_app4', mogeController.delete) return router } module.exports.getNonAuthRoute = getNonAuthRoute
server.js
サーバー起動処理を書いたもの。
const app = require('./app') const http = require('http') // エラーリスナー const onError = (error ) => { // エラーを検知した時の処理 // throw error } // イベントリスナー const onListening = () = > { // 何かしらのイベントを検知した時の処理 } // ポートの設定 const port = process.env.PORT || '3000' app.set('port', port) // サーバー生成 const server = http.createServer(app) // サーバー起動 server.listen(port) // リスナー設定 server.on('error', onError) server.on('listening', onListening) module.exports = server
that’s all !!