1.3.0 • Published 7 months ago

miniframe-router v1.3.0

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

MiniframeJS/Router

Простое и мощное решение для маршрутизации в приложениях на Express.js, которое предоставляет чистый и интуитивно понятный способ организации маршрутов и контроллеров.

Возможности

  • Простой синтаксис определения маршрутов
  • Действия на основе контроллеров
  • Группировка маршрутов для улучшенной организации
  • Автоматическая загрузка контроллеров

Документация

Установка

npm install miniframe-router
yarn add miniframe-router
pnpm add miniframe-router

Использование

Базовые маршруты

routes/index.ts

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

// Определение корневого маршрута
root("index#index");

// Определение GET и POST маршрутов
get("/users", "users#show");
post("/users", "users#update");

// Определение GET и POST маршрутов
get("/posts", "posts#show");
post("/posts", "posts#update");

export default getRouter;

Маршруты с Middleware

Вы можете добавлять middleware к любому маршруту:

import { authenticate } from "./middlewares/auth";
import { validateUser } from "./middlewares/validation";

// Один middleware
get("/users/:id", "users#show", {
  withMiddlewares: [authenticate],
});

// Несколько middleware в порядке выполнения
post("/users", "users#create", {
  withMiddlewares: [authenticate, validateUser],
});

// Middleware в сгруппированных маршрутах
scope("admin", () => {
  get("/users", "users#show", {
    withMiddlewares: [authenticate],
  });

  post("/users", "users#create", {
    withMiddlewares: [authenticate, validateUser],
  });
});

Группировка маршрутов с Middleware

Вы можете добавлять middleware как к отдельным маршрутам, так и ко всей группе маршрутов:

import { authenticate } from "./middlewares/auth";
import { validateUser } from "./middlewares/validation";
import { logRequest } from "./middlewares/logging";

// Применить middleware ко всем маршрутам в группе
scope(
  "admin",
  () => {
    // Эти маршруты будут требовать аутентификации
    get("/users", "users#index");
    post("/users", "users#create");

    // Этот маршрут будет требовать и аутентификации, и валидации
    post("/users/:id", "users#update", {
      withMiddlewares: [validateUser],
    });
  },
  {
    withMiddlewares: [authenticate],
  }
);

// Комбинирование нескольких middleware для группы
scope(
  "api",
  () => {
    get("/stats", "stats#index");
    get("/health", "health#check");
  },
  {
    withMiddlewares: [authenticate, logRequest],
  }
);

Middleware, указанные в опциях группы, будут применяться ко всем маршрутам внутри этой группы. При этом вы можете добавлять дополнительные middleware к конкретным маршрутам, которые будут выполняться после middleware группы.

Структура файлов приложения:

src
  index.ts

  routes/
      index.ts
  controllers/
      indexController.ts
      usersController.ts
      postsController.ts

index.ts

import cors from "cors";
import cookieParser from "cookie-parser";
import getRoutes from "./routes"; // <<< ОПРЕДЕЛЯЕМ МАРШРУТЫ

const app = express();

app.use(
  cors({
    origin: ["http://localhost:3000"],
    credentials: true,
  })
);

app.use(cookieParser());
app.use(express.json());
app.use(getRoutes()); // <<< ИСПОЛЬЗУЕМ МАРШРУТЫ

app.listen(4000, () => {
  console.log(`Сервер запущен на порту: 4000`);
});

Группировка маршрутов

Группируйте связанные маршруты под общим префиксом:

routes/index.ts

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

scope("admin", () => {
  get("/users", "users#show");
  post("/users", "users#update");

  get("/posts", "posts#show");
  post("/posts", "posts#update");
});

export default getRouter;

Это создаст маршруты:

  • GET /admin/users -> controllers/admin/usersController.ts (действие show)
  • POST /admin/users -> controllers/admin/usersController.ts (действие update)
  • GET /admin/posts -> controllers/admin/postsController.ts (действие show)
  • POST /admin/posts -> controllers/admin/postsController.ts (действие update)

Структура контроллеров

Контроллеры должны находиться в директории controllers. Для маршрутов с префиксами контроллеры автоматически ищутся в соответствующих поддиректориях.

src
  index.ts

  routes/
      index.ts
  controllers/
      indexController.ts
      usersController.ts
      postsController.ts

      admin/
          usersController.ts
          postsController.ts

Пример контроллера:

controllers/usersController.ts

import { Request, Response } from "express";

export const show = (req: Request, res: Response) => {
  res.send("Список пользователей");
};

export const update = (req: Request, res: Response) => {
  res.send("Пользователь обновлен");
};

Справочник по API

  • root(controllerAction): Определяет корневой маршрут (/)
  • get(path, controllerAction): Определяет GET маршрут
  • post(path, controllerAction): Определяет POST маршрут
  • routeScope(prefix, callback): Группирует маршруты под общим префиксом

License

MIT.

Author

Ilya N. Zykin | the-teacher