1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-epii-server

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

@epiijs/server

Простой фреймворк для сервера.

  • Функциональный пайплайн.
  • Маршрутизатор на основе файловой системы.
  • Фильтр «обработчик в действии».
  • Внедрение зависимостей сервисов.

Версия v3.x предназначена только для модуля ES.

Установка

npm i @epiijs/server --save

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

Пример проекта

(root)
├─ src
│  ├─ actions
│  │  ├─ $params
│  │  │  └─ index.ts
│  │  └─ index.ts
│  └─ services
│     └─ service.ts
└─ start.ts

Будет маршрутизировать запросы следующим образом:

=> /$params
=> /

Запуск сервера

import { startServer } from '@epiijs/server';

startServer({
  name: 'your-server',
  port: 8080,
  path: {
    root: __dirname // или getDirNameByImportMeta(import.meta)
  }
});

Обработка запросов с помощью action

Предоставьте обработчики запросов в /actions.

import {
  ActionResult,
  IncomingMessage
} from '@epiijs/server';

export default async function (props: IncomingMessage): Promise<ActionResult> {
  const { method, url } = props;

  // простой ответ
  return 'hello world';
  
  // пользовательский ответ
  return {
    status: 400,
    headers: { 'content-type': 'application/json' },
    content: JSON.stringify({})
  };

  // или вы можете выдать ошибку
  throw new Error('fatal error');
}

Фильтрация пайплайна с помощью обработчика в действии

Используйте useHandler, чтобы отфильтровать запрос и удалить после вызова action.

import {
  ActionResult,
  Context,
  IncomingMessage
} from '@epiijs/server';

export default async function (props: IncomingMessage, context: Context): Promise<ActionResult> {
  const { method, url } = props;

  await context.useHandler(dispose => {
    const start = Date.now();
    if (method !== 'GET') {
      return { status: 405, content: 'method not allowed' };
    }
    dispose(() => {
      console.log('elapsed', Date.now() - start);
    });
  });
  
  return 'hello world';
}

Внедрить service как зависимость

Предоставьте фабрику услуг в /services.

export interface IUserService {}

export default function createUserService() {
  const userService: IUserService = {};
  return userService;
}

Используйте useService в action, чтобы получить экземпляр службы.

import {
  ActionResult,
  Context,
  IncomingMessage
} from '@epiijs/server';

export default async function (props: IncomingMessage, context: Context): Promise<ActionResult> {
  const { method, url } = props;

  const userService = await context.useService('UserService');

  const users = await userService.findUsers();  
  return users;
}

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

WIP

  • глобальная обработка ошибок;
  • объявление действий и служб.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

EPII-server — это Node-приложение на основе фреймворка Koa, которое разделяет обслуживание и инструменты для сборки и рендеринга, обеспечивая более чистый опыт разработки в стиле MVC. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Язык

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-epii-server.git
git@api.gitlife.ru:oschina-mirror/mirrors-epii-server.git
oschina-mirror
mirrors-epii-server
mirrors-epii-server
main