node.js + express + TypeScript Mail Form プログラム。

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 のカート一時ファイルとして 使った手法の両方を、
将来的には、使うとおもう。

このブログ記事について

このページは、おんちゃんが2026年1月29日 13:02に書いたブログ記事です。

ひとつ前のブログ記事は「おんちゃんの高齢者フリーランスの仕事探し放浪記。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

月別 アーカイブ

ウェブページ

サイトナビ