質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

0回答

762閲覧

expressにてapp.use([別ファイルのexpressモジュール])という書き方でコードを整理するのにデメリットは存在するのか?

domidomi

総合スコア34

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2021/02/11 14:48

質問

  • app.ts

typescript

1// import 諸々 2 3var app = express() 4 5// ■■■■■■■■■■■部分A■■■■■■■■■■■ 6var RedisStore = connectRedis(session) 7var redisClient = redis.createClient({ 8 host: 'session', 9 port: 6379, 10 prefix: 'sid:', 11}) 12 13app.use( 14 session({ 15 secret: 'hoge', 16 resave: false, 17 saveUninitialized: true, 18 store: new RedisStore({ 19 client: redisClient, 20 }), 21 cookie: { 22 path: '/', 23 }, 24 }) 25) 26// ■■■■■■■■■■■部分A■■■■■■■■■■■■ 27 28app.set('view engine', 'ejs') 29app.use('/static', express.static(__dirname + '/public')) 30 31app.use(express.json()) 32app.use(express.urlencoded({extended: true})) 33 34ー省略ー

のような app.ts があったときに部分Aはセッションに関わるものがつらつらと書かれているので別ファイルに分けたいなと思っています。(実際はもっと長い部分を分けようと思っている)

その際

  • sessionApp.ts

typescript

1const app = express() 2 3var RedisStore = connectRedis(session) 4var redisClient = redis.createClient({ 5 host: 'session', 6 port: 6379, 7 prefix: 'sid:', 8}) 9app.use( 10 session({ 11 secret: 'hoge', 12 resave: false, 13 saveUninitialized: true, 14 store: new RedisStore({ 15 client: redisClient, 16 }), 17 cookie: { 18 path: '/', 19 }, 20 }) 21) 22 23export default app

と切り出して

  • app.ts

typescript

1import sessionApp from './path/to/sessionApp' 2// import 諸々 3 4var app = express() 5 6// ■■■■■■■■■■■部分A■■■■■■■■■■■ 7app.use(sessionApp) 8// ■■■■■■■■■■■部分A■■■■■■■■■■■ 9 10app.set('view engine', 'ejs') 11app.use('/static', express.static(__dirname + '/public')) 12 13app.use(express.json()) 14app.use(express.urlencoded({extended: true})) 15 16ー省略ー

と記述する事に処理的なデメリットはありますでしょうか?(一応切り出す前と同じ動作は確認できます)
app.tsのappを引数に渡すような関数モジュールを作成したほうがいいでしょうか?

app.get('/api',apiRouter)のようにルーティング処理を切り出す事は様々なサイトに載っているのですが、app.useなどの塊を切り出したい時にどうすればいいのか探せなかったので質問させていただきます。

ちょっと思うこと

感覚的にはexpressのインスタンスがexpressのインスタンスのミドルウェアとして機能することになる?ので、expressのインスタンス1つ分メモリ消費のデメリットがあるのかな?とも思ったりもします・・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/02/11 17:28

express のインスタンスを複数作るのはおかしいというか、sessionApp.ts が export するのは app.use の引数として渡してる関数のはず。
miyabi-sun

2021/02/12 02:15 編集

全体的には良いと思います。そしてまぁまぁ一般的な感覚だと思います。 `var app = express()`も丸コピーで移植はダメですね。 session関数の返り値は関数だと思うので、 `export default session({...})`とする感じでしょうか。
domidomi

2021/02/12 12:20 編集

@hoshi-takanori さん コメントありがとうございます。 > sessionApp.ts が export するのは app.use の引数として渡してる関数のはず というのは、自分が記載した上記の二パターンの書き方はまったく同じといって良いということでしょうか? @miyabi-sun さん コメントありがとうございます。 > `export default session({...})`とする感じでしょうか。 例が悪く申し訳ないです。上では部分Aに app.use が一度しか使われていないですが実際は切り出したいのは複数の app.use 等が含まれている箇所になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問