miniframe-router:Express.JS应用程序的路由器
**miniframe-router** — 受 Ruby on Rails 启发的 Express.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"); });
语境
我已经有大约 10 年没有编写过 NodeJS 应用程序了。出于对 Telegram Mini Apps 的好奇,我决定构建几个简单的项目来探索这个新领域。
为此,我需要为应用程序的后端进行路由。现有的解决方案并没有给我留下深刻印象,所以我决定创建自己的路由器 — 简单、有效,并受到 Ruby on Rails 的启发。这也是刷新我创建 NPM 包知识的绝佳机会,这是我 9 年来从未做过的事情。
设计
对路由器的期望:
**路由在单独的文件中定义**
这简化了应用程序结构并避免使主应用程序文件混乱。
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;
**路由器集成到主 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()); // <<< APPLY ROUTES app.listen(3000, () => { console.log("Demo app is running on http://localhost:3000"); });
**遵循连接控制器的惯例**
控制器位于“src/controllers”目录中。
MyApp └── src ├── controllers │ ├── blog │ │ └── postsController.ts │ ├── indexController.ts │ └── usersController.ts ├── index.ts └── routes └── index.ts
文件结构
例如:`src/controllers/usersController.ts` (或者 `.js`)。
import { Request, Response } from "express"; export const index = (req: Request, res: Response) => { res.send("List of all users"); }; export const show = (req: Request, res: Response) => { const { id } = req.params; res.send(`Showing details for user ${id}`); }; export const create = (req: Request, res: Response) => { const userData = req.body; res.send(`Creating new user with data: ${JSON.stringify(userData)}`); }; export const update = (req: Request, res: Response) => { const { id } = req.params; const userData = req.body; res.send(`Updating user ${id} with data: ${JSON.stringify(userData)}`); }; export const destroy = (req: Request, res: Response) => { const { id } = req.params; res.send(`Deleting user ${id}`); };
执行
步骤:
问答
为什么要这么做?现有的解决方案已经很多了!
为什么这么简单?难道不应该更复杂吗?
为什么要有控制器?它们不是没有必要吗?
这个解决方案有用吗?
它能处理多大规模的项目?
结论
项目代码和文档:GitHub - miniframe-router
NPM 包:miniframe-router
点赞、分享和订阅!欢迎提出建设性反馈。
作者页面:GitHub - the-teacher