ホームページ >ウェブフロントエンド >jsチュートリアル >miniframe-router: Express.JS アプリケーション用ルーター

miniframe-router: Express.JS アプリケーション用ルーター

DDD
DDDオリジナル
2025-01-02 13:10:42286ブラウズ

miniframe-router — Ruby on Rails からインスピレーションを得た、Express.JS アプリケーション用の最小限のルーターです。作り方はこちらです。

miniframe-router: Router for Express.JS Applications


単純なアプリケーションでのルーティングの例。

// Root routes
root("index#home");

// Basic CRUD routes
get("/users", "users#index");
get("/users/:id", "users#show");
post("/users", "users#create");
post("/users/:id", "users#update");
post("/users/:id/destroy", "users#destroy");

// Posts routes with scope
scope("blog", () => {
  get("/posts", "posts#index");
  get("/posts/:id", "posts#show");
  post("/posts", "posts#create");
  post("/posts/:id", "posts#update");
  post("/posts/:id/destroy", "posts#destroy");
});

コンテクスト

私は約 10 年間 NodeJS アプリケーションを書いていませんでした。 Telegram Mini Apps に興味があったので、この新しい分野を探索するためにいくつかの簡単なプロジェクトを構築することにしました。

このために、アプリケーションのバックエンドにルーティングが必要でした。既存のソリューションにはあまり感銘を受けなかったので、シンプルで効果的で、Ruby on Rails からインスピレーションを得た独自のルーターを作成することにしました。また、9 年間行っていなかった NPM パッケージの作成に関する知識を更新する素晴らしい機会でもありました。


デザイン

ルーターに期待されること:

  1. ルーティングは別のファイルで定義されます

これにより、アプリケーションの構造が簡素化され、メインのアプリケーション ファイルが乱雑になることがなくなります。

import {
  root,
  get,
  post,
  routeScope as scope,
  getRouter,
} from "miniframe-router";

// Root routes
root("index#home");

// Basic CRUD routes
get("/users", "users#index");
get("/users/:id", "users#show");
post("/users", "users#create");
post("/users/:id", "users#update");
post("/users/:id/destroy", "users#destroy");

// Posts routes with scope
scope("blog", () => {
  get("/posts", "posts#index");
  get("/posts/:id", "posts#show");
  post("/posts", "posts#create");
  post("/posts/:id", "posts#update");
  post("/posts/:id/destroy", "posts#destroy");
});

export default getRouter;
  1. ルーターはメインの ExpressJS ファイルに統合されます

アプリケーションのシンプルで効果的なエントリ ポイント: src/index.js または src/main.js。

import express from "express";
import getRouter from "./routes"; // <<< DEFINE ROUTES

const app = express();
app.use(express.json());
app.use(getRouter()); // <<< USER ROUTES

app.listen(3000, () => {
  console.log("Demo app is running on http://localhost:3000");
});
  1. コントローラーを接続するための規則に従います

コントローラーは src/controllers ディレクトリにあります。

MyApp
└── src
    ├── controllers
    │   ├── blog
    │   │   └── postsController.ts
    │   ├── indexController.ts
    │   └── usersController.ts
    ├── index.ts
    └── routes
        └── index.ts

ファイル構造

  • ルートは src/routes/index.js で定義されます。
  • コントローラーには、リクエストを処理するためのロジックが含まれています。

例: src/controllers/usersController.ts (または .js)。

// Root routes
root("index#home");

// Basic CRUD routes
get("/users", "users#index");
get("/users/:id", "users#show");
post("/users", "users#create");
post("/users/:id", "users#update");
post("/users/:id/destroy", "users#destroy");

// Posts routes with scope
scope("blog", () => {
  get("/posts", "posts#index");
  get("/posts/:id", "posts#show");
  post("/posts", "posts#create");
  post("/posts/:id", "posts#update");
  post("/posts/:id/destroy", "posts#destroy");
});

実装

手順:

  1. Docker を使用して開発コンテナを作成します。
  2. TypeScript を JavaScript にコンパイルするために ESBuild をセットアップします。
  3. テストのために Jest をインストールします。
  4. ルーターの最初のバージョンを検証するテストを作成します。
  5. すべてのテストに合格するまでルーターを実装します。
  6. 長い間使用されていなかった NPM 資格情報を回復します (9 年後)。
  7. NPM パッケージをバージョン 1.0.0 として公開します。
  8. 重大なインストールのバグを修正し、バージョン 1.0.0 と 1.1.0 を削除します。 ?
  9. ルーターを 12 個のルートを持つ運用プロジェクトに適用します。

Q&A

なぜこんなことをするのでしょうか?既存のソリューションはたくさんあります。

  • それは興味深い役に立つであり、ソリューションの多様性に貢献します。

なぜそんなに単純なのでしょうか?もっと複雑にするべきではないでしょうか?

  • KISSの原則に従います。複雑さは必要に応じて後から追加できます。

なぜコントローラーなのか?それらは不必要ではないでしょうか?

  • コントローラーは小規模なプロジェクトに便利です。アクション/オペレーションのようなソリューションのような高度な抽象化は、大規模なシステムに適しています。

このソリューションは機能するのでしょうか?

  • もちろんです!このルーターは小規模な実稼働アプリで使用され、数十のルートで完璧に動作しました。

どのくらいの規模のプロジェクトを処理できますか?

  • miniframe-router は、数十のルートを持つアプリケーションに適しています。厳密なサイズ制限はありません。

結論

プロジェクト コードとドキュメント: GitHub - miniframe-router

NPM パッケージ: miniframe-router

いいね、シェア、購読してください!建設的なフィードバックはいつでも大歓迎です。

著者のページ: GitHub - 先生

以上がminiframe-router: Express.JS アプリケーション用ルーターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。