Posted at

Nodejs+express4でハマったところ

現在、個人で運営しているチャットサービスのアップデートをする際に、戸惑いぐぐった場所をまとめておきたいと思います。

チャットガチャの技術側の話

https://qiita.com/ryuuga_h/items/1274dcab9fb468ea8ea5


未来人のために一応、環境

node -v v12.8.0

"express": "^4.17.1"


アプデでやりたかったこと

・「メイン」 - jQueryを使ってAjaxでデータを取得し表示する。

・その途中で,sitemap.xmlとrobots.txtが表示されていないことに気付いた。


「バグ1」 internal/modules/cjs/loader.js: Error: Cannot find module 'express'

1.sitemap.xmlが404だったため、直そうと思った。

2.express-sitemap-xmlというライブラリがあるらしいことを見つける。

3.express-sitemap-xmlをnpmでインストール。・・・した後。

4 . internal/modules/cjs/loader.js: Error: Cannot find module 'express'

なんでやねん!


直し方

https://qiita.com/kenju/items/5b2fda95be4685a750e1


  1. npm install -g npm-install-missing


  2. npm-install-missing


無事直ったようだ。

なぜこんなエラーが出てしまったのか分からない。今は動いているからよしとしよう。

何度も似たようなことが起きればガチる。


「バグ2」 Ajaxが延々とエラーが起きる。

ajaxでファイルを読み込もうと思っていたが、なかなか出力されなかった。

コードがおかしいのかjqueryのバージョンが違うからなのかいろいろ考えたが・・・。


ajax解決

Ajaxには軽量版がある。(軽量版はajaxが使えない)

https://code.jquery.com/

URLから.slimを削除したらAjaxが使えるようになった。

こんなこと知っていたはずなのに、いざエンカウントすると停止してしまう。

まあ、エラーが親切だったのですぐ気づけてよかった。


「バグ3」 node.jsでsitemapやrobotsを表示する

上記のError: Cannot find module 'express'

この関係で1時間ぐらい持っていかれたと思う。結局、express-sitemap-xmlは使わないことにした。

なにせ作っているのは、4ページしかない小規模なサービスだ。

それに、sitemapやrobots.txtはすでに作ってあった。

ただそのままrootにおいていても404になる。

expressをちゃんと勉強しないとね。


解決 Node.jsでsitemap.xmlやrobots.txtを表示する

静的ファイルもpublicフォルダに入っていないと表示できないので、こういう書き方をしてみた。

お作法としてあっているかどうかは分からないが表示されたから今の所満足だ。


app.js

//sitemap.xml

app.get('/sitemap.xml', function(request, response) {
response.sendFile(__dirname + '/public/xxxxx/sitemap.xml');
});

//robots.txt
app.get('/robots.txt', function(request, response) {
response.sendFile(__dirname + '/public/xxxxx/robots.txt');
});



個人開発。 アプデの注意点

一度に大量のファイルを変更するとアプデのときに大変だと気付いた。

3つぐらいのファイルを変更していくスタイルのほうがいいだろう。

一度に10ファイルとか変更すると、ファイル自体のアップロードのし忘れもあるだろうし実働サーバーでのテストが大変なことに気付いた。


最後に、運営しているサービス

少しずつ良くなっている。またハマったところがあればまとめておきたい。

個人開発は勉強になるぞ。

チャットガチャ

https://chatgacha.com/