https://github.com/gravity-ui/expresskit
https://github.com/gravity-ui/expresskit
Last synced: 4 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/gravity-ui/expresskit
- Owner: gravity-ui
- License: mit
- Created: 2023-01-07T15:53:55.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2026-03-02T22:36:28.000Z (4 months ago)
- Last Synced: 2026-03-03T00:43:19.723Z (4 months ago)
- Language: TypeScript
- Size: 1.14 MB
- Stars: 8
- Watchers: 0
- Forks: 3
- Open Issues: 6
-
Metadata Files:
- Readme: README-ru.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README
# ExpressKit
`ExpressKit` — легковесная обертка для [express.js](https://expressjs.com/), которая интегрируется с [NodeKit](https://github.com/gravity-ui/nodekit), обеспечивая такие функции, как логирование запросов, поддержка трассировки, асинхронные контроллеры и middleware, а также детальное описание маршрутов.
Установка:
```bash
npm install --save @gravity-ui/nodekit @gravity-ui/expresskit
```
Основное использование:
```typescript
import {ExpressKit} from '@gravity-ui/expresskit';
import {NodeKit} from '@gravity-ui/nodekit';
const nodekit = new NodeKit();
const app = new ExpressKit(nodekit, {
'GET /': (req, res) => {
res.send('Hello World!');
},
});
app.run();
```
## CSP (политика безопасности контента)
`config.ts`
```typescript
import type {AppConfig} from '@gravity-ui/nodekit';
import {csp} from '@gravity-ui/expresskit';
const config: Partial = {
expressCspEnable: true,
expressCspPresets: ({getDefaultPresets}) => {
return getDefaultPresets({defaultNone: true}).concat([
csp.inline(),
{csp.directives.REPORT_TO: 'my-report-group'},
]);
},
expressCspReportTo: [
{
group: 'my-report-group',
max_age: 30 * 60,
endpoints: [{ url: 'https://cspreport.com/send'}],
include_subdomains: true,
}
]
}
export default config;
```
## Управление кешированием
По умолчанию ExpressKit устанавливает `no-cache` заголовки на все ответы. Вы можете управлять этим поведением глобально или на уровне маршрута.
### Глобальная конфигурация
```typescript
const config: Partial = {
expressEnableCaching: true, // Разрешить кеширование по умолчанию
};
```
### Конфигурация на уровне маршрута
```typescript
const app = new ExpressKit(nodekit, {
'GET /api/cached': {
enableCaching: true, // Разрешить кеширование для этого маршрута
handler: (req, res) => res.json({data: 'кешируемые'}),
},
'GET /api/fresh': {
enableCaching: false, // Принудительно no-cache
handler: (req, res) => res.json({data: 'всегда свежие'}),
},
});
```
Настройка `enableCaching` на уровне маршрута переопределяет глобальную. Состояние доступно в `req.routeInfo.enableCaching`.
## Валидация запросов и сериализация ответов
- [Валидация запросов и сериализация ответов](https://github.com/gravity-ui/expresskit/blob/main/docs/VALIDATOR-ru.md) - использование zod для автоматической валидации запросов и сериализации ответов.