Node.js + Express がなぜか止まっている
手軽にWebサーバが立てられるこの環境に重宝しています。
staticに公開フォルダを指定すれば、画像でもテキストファイルでもhttpで出せるなんて、ありがたい。
フロントエンドVue.js、バックエンドNode.js+Expressで開発中に、途中でいいから公開して使わせてと言われて、テストもろくにできていないものを公開することになった時、問題が発生したため、備忘録として、ここに記載することにした。
結論から言うと、Node.jsとか関係ない、コマンドプロンプトの問題というオチです。
環境
- フロントエンド
- node.js 16.13.0
- Vue.js 2.6.11
- express 4.16.1
- バックエンド
- node.js 16.13.0
- express 4.16.1
- (簡易公開時)実行環境
- Windows 10 Enterprise 20H2
- コマンドプロンプトを起動し、フロント/バックともに nodeを起動
問題
- 何かをきっかけにバックエンドのnodeの応答がなくなる
- 何がきっかけなのか公開側では判断できず、httpサービス利用者からの指摘で判明。確かに応答がないため、Node.jsの再起動をするの繰り返しをしていた。(無知だった。)
原因
コマンドプロンプトでクリックしたことにより、「簡易編集モード」になり、コマンドプロンプト上のバッチ処理が一時停止になって、動けなくなったのが原因だった。
コマンドプロンプトが「簡易編集モード」であるか否かは、タイトル表示に「選択」とあるかどうかで判断できる。(が、わかりづらい)
対処方法
「簡易編集モード」に移行させない設定にする。設定方法は、以下の記事にお任せ。
フロントエンドでは現象は起きない
で、解決したのだけども、フロントエンド側は簡易編集モードでも、httpでリロードがかかっても問題なくSPAのページを表示してくれる。キャッシュが残っているからなのか、Node.js+ExpressのStaticフォルダを指定しているとこの問題が起きないのか、切り分けはできていない。なんでだろう。わかったら、追記する予定。
最後に
いいかどうかは別として、スクリプトのセットをエンドユーザに提供して、エンドユーザ自身にNode.jsサーバを立ててもらう運用があり、この問題があることを知らないと私みたいに「なぜか動かない」という状態になってしまうのが難点。
それから、この問題のためにググったけど、Node.js初心者であったこともあって、Node.jsの仕様との切り分けに手間取り、簡易編集モードにたどり着くのに時間がかかった。コマンドプロンプトの側から検索をかけても、PAUSEコマンドの仕様の紹介ページが多く引っかかったのも悔やまれる。
わかってしまえば単純だね。しかし、サイレントにバッチ処理を止めるこの仕様はなんなんだ。