node.js + express + TypeScript Mail Form プログラム。
node.js + express + TypeScript サーバーサイドの app の Tips!! の一環で、
Mail Form プログラムを作成してみた。
このプログラムで、確認できる事。
-
typescript での、mail の送信
今回は、nodemailer を使ってみた。 -
カートのような一時ファイルが使えるかの確認
Redis を使ったセッション管理で、行うことにした。
ただ、/dev/shm (shared memory) を使えば、perl でよく使った、SDBM、XDBM ファイルみたいなのでも良い気がする。
とにかく、シンプルで、10年以上は、そのまま使える手法がよいと思う!!
- TEXT ファイルのアクセスと、ファイルロックの機能
-
メール文面のテンプレートの作成と、それを使った、メール本文の作成。
mustache を使ってみた。 -
/admin(認証) ページ下 へのアクセスの、一括 認証処理。
オープンページとクローズページの切り分け。
認証ミドルウエアを、index.ts の中に組み入れた。 - 認証処理で得た、管理者 id の、サブコントローラへの引き継ぎ。
- router + controller 対 による、複数 コントローラプログラム 構成の構築。
github に公開しちょります。
@tosa-no-onchan nodejs_typescript_samples
1. ファイルロックについての、Tips!
ファイルロックは、今回 proper-lockfile.lock() を使った。
これは、ロック管理をする際、渡したパスに、ディレクトリーを作成する。
これだと、HD や SSD を使っている場合、寿命が気になる。
そんなときは、/dev/shm (shared memory ubuntu24.04) 下に、パスを指定するのが良いと思う。
ただし、パス名は、他の プログラムと重ならないようにする事。
2. メールテンプレートから、メール本文への変換に、今回は、mustache を使ったが、
typscript の正規表現を使った、一括置換があるので、そちらも良い気がする。
こちらのほうが、将来、mustache がメンテナンスされなくなったらの心配が不要じゃ。
シンプル イズ ベスト!!
一度作ったら、10年そのまま動くと、言うのが理想じゃ!!
実際、おんちゃんが perl で作った、ショッピングモールのプログラムは、作って 20年以上経っているが、
いまだに、そのまま動いちょります。
3. カートファイルに、今回は、Redis を使った。
その為に、わざわざ、redis-server を入れた。
これが、めんどうじゃ!!
なので、別の方法も検討してみた。
perl の SDBM に似たものが、typescript にも LevelDB(classic-level) であった。
これが、使えそう。
/dev/shm (shared memory) 上に、 該当DB ファイルを作って、排他制御に、
同じく、/dev/shm を使った、proper-lokfile を使えばできそうじゃ?
もしかしたら、以前、google ai で教えてもらった中に、あったのかも知れない。
$ npm install classic-level
import {classicLevel} from 'classic-level';
classic-level も試してみたが、1ファイル構成ではなくて、最後に、期限切れのファイルを削除するのが面倒みたい。
4. better-sqlite3 と言うのがあるみたい。
1ファイル構成で、基本 sqlite3 だが、パフォーマンスと使い勝手が、良いみたい。
特徴は、
i ) DB オープンしたまま使えるみたい。
ii) await async が、不要みたい。
iii) データサイズも、めちゃくちゃ、おおきい。
結局、こちらを、カートファイル用に使うことにした。
一応、動作テスト OK になったので、後日
github に公開するように、します。
4.1 better-sqlite3 使用に関する、Tips!!
ChatGTP で、下記、質問をして、回答を取り込んだ方が良いと、思う!!
"node.js + express + typscript で、 better-sqlite3 を、service - repository 構成にした時に、router -contoroller 構成での複数 controller での共用方法"
上記でのサンプル例 と、今回 おんちゃんが Mail Form のカート一時ファイルとして
使った手法の両方を、
将来的には、使うとおもう。