К основному содержанию
скилл CX Codex

express-typescript — скилл для Claude Code: API на Express

Правила для агента, который пишет API на Express.js и TypeScript: структура проекта, middleware, валидация и безопасность.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Mindrally/skills --skill express-typescript -a claude-code
Открыть на GitHub

Что делает express-typescript

Скилл задаёт агенту набор соглашений по коду на Express.js и TypeScript. Внутри — принципы именования (PascalCase для типов, camelCase для функций, kebab-case для файлов), запрет на any, предпочтение интерфейсов и Zod для валидации на лету. Агент получает готовую раскладку каталогов: routes/{resource}/ с контроллером и валидаторами, middleware/, services/, models/, types/express.d.ts.

Дальше идут шаблоны кода. Создание приложения с helmet, cors и парсингом тела, логгер запросов, middleware аутентификации с проверкой токена, роутер с валидацией и обработчиком ошибок последним в цепочке. Отдельный блок — расширение типов Express через declare global, чтобы req.user не ругался на отсутствующее свойство.

Безопасность описана списком: заголовки через helmet, ограничение частоты запросов, санитизация ввода, HTTPS в продакшене. Пример лимитера в исходнике обрывается на середине настройки, так что конкретные значения окна и порога придётся задать самому. Скилл ставится в шесть платформ, но текст правил один и тот же — расхождений между редакторами не будет.

Какие задачи решает

  • разложить роуты Express по ресурсам с контроллерами и валидаторами
  • написать middleware аутентификации с проверкой токена
  • подключить Zod и отдавать 400 с деталями ошибок
  • собрать централизованный обработчик ошибок с классами AppError
  • добавить helmet, CORS и лимит запросов в приложение

Примеры запросов агенту

  • Настрой структуру проекта Express с TypeScript по скиллу express-typescript
  • Добавь middleware валидации через Zod для создания пользователя
  • Покажи, как расширить тип Request полем user

Как установить express-typescript

1Через Skills CLI (Vercel)

npx skills add Mindrally/skills --skill express-typescript -a claude-code

2Вручную: положить файлы

~/.claude/skills/express-typescript/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/express-typescript/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора168

flask-python Набор правил по Flask для ИИ-ассистентов. Задаёт паттерны фабрики приложений, синтаксис Marshmallow и организацию маршрутов через блюпринты. CX Codex +1 1 500установок postgresql-best-practices Скилл с правилами разработки на PostgreSQL: типы данных, схема, индексы, разбор планов запросов и обслуживание базы. CX Codex +1 1 500установок tailwindcss Задаёт агенту стиль работы с TailwindCSS: утилитарные классы прямо в разметке, мобильный первым, тёмная тема через вариант dark:. CX Codex +1 1 500установок data-analysis-jupyter Задаёт правила для анализа данных, построения графиков и оформления блокнотов Jupyter с помощью pandas, numpy, matplotlib и seaborn. Помогает писать воспроизводимый код без лишних циклов. CX Codex +1 1 500установок react-query Задаёт агенту правила работы с React Query: кэширование, фоновые обновления, инвалидация запросов и оптимистичные апдейты. CX Codex +1 1 400установок redux-toolkit Набор правил по архитектуре Redux Toolkit для React и Next.js на TypeScript. Пригодится при настройке хранилища, типизации хуков и написании слайсов. CX Codex +1 1 300установок front-end-developer Скилл превращает агента в старшего фронтенд-разработчика: React, Next.js, TypeScript, Tailwind, доступность. Пригодится, когда нужно писать компоненты, а не обсуждать их. CX Codex +1 1 300установок lua Задаёт агенту правила письма на Lua: таблицы, метатаблицы, обработка ошибок, игровой цикл и работа с памятью. Пригодится, если проект на Lua или Love2D. CX Codex +1 1 300установок

Похожие

nodejs-express-server aj-geddes Скилл для сборки Express.js-серверов: маршруты, цепочки middleware, JWT-аутентификация, подключение к базе. Пригодится, когда пишете REST API на Node.js. CX Codex +1 3 300установок File Analysis API with Node.js and Express [email protected] Промпт для разбора загруженных файлов в API на Express: добавляет логику анализа, не ломая формат ответа. GP ChatGPT ★ 174 597звёзд репо bun-hono-integration secondsky Скилл подсказывает агенту, как строить API на Hono под Bun: маршруты, middleware, валидация через Zod, RPC-клиент. Пригодится, когда проект уже крутится на Bun. CX Codex +1 452установок typescript-mcp-server-generator официальный github Генерирует TypeScript-проект MCP-сервера с инструментами, ресурсами и конфигурацией. Пригодится, когда нужно быстро заложить сервер на MCP TypeScript SDK v2. 12 050установок nodejs-backend alinaqi Скилл задаёт структуру Node.js-проекта и готовые шаблоны для Express, Fastify и репозиториев. Подключается, когда агент правит код в src/api, src/routes или src/server. CX Codex +1 434установок mediator-pattern patterns.dev Скилл объясняет паттерн «посредник»: компоненты общаются через одну точку, а не напрямую. Пригодится, когда связей между объектами стало слишком много. CX Codex +1 608установок

Рядом в теме «Бэкенд и API»

Всё по теме «Бэкенд и API» →

Вопросы о express-typescript

Как установить express-typescript в Claude?

Выполните npx skills add Mindrally/skills --skill express-typescript -a claude-code. Файл скилла окажется в ~/.claude/skills/express-typescript/SKILL.md.

Что делает express-typescript?

Даёт агенту правила разработки API на Express.js и TypeScript: структуру каталогов, паттерны middleware, валидацию запросов и практики безопасности.

Для каких платформ подходит скилл?

Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI и OpenCode. Для каждой платформы своя команда установки и свой путь к файлу скилла.

Исходный текст

SKILL.md · Apache-2.0
---
name: express-typescript
description: Guidelines for building robust APIs with Express.js and TypeScript, covering middleware patterns, routing, and security best practices
metadata:
  maintainer: Mindrally
  source: https://github.com/Mindrally/skills
---

# Express TypeScript Development

You are an expert in Express.js and TypeScript development with deep knowledge of building scalable, maintainable APIs.

## TypeScript General Guidelines

### Basic Principles

- Use English for all code and documentation
- Always declare types for variables and functions (parameters and return values)
- Avoid using `any` type - create necessary types instead
- Use JSDoc to document public classes and methods
- Write concise, maintainable, and technically accurate code
- Use functional and declarative programming patterns; avoid classes where possible
- Prefer iteration and modularization to adhere to DRY principles

### Nomenclature

- Use PascalCase for types and interfaces
- Use camelCase for variables, functions, and methods
- Use kebab-case for file and directory names
- Use UPPERCASE for environment variables
- Use descriptive variable names with auxiliary verbs: `isLoading`, `hasError`, `canDelete`
- Start each function with a verb

### Functions

- Write short functions with a single purpose
- Use arrow functions for middleware and handlers
- Use async/await consistently throughout the codebase
- Use the RO-RO pattern for multiple parameters

### Types and Interfaces

- Prefer interfaces over types for object shapes
- Avoid enums; use maps or const objects instead
- Use Zod for runtime validation with inferred types
- Use `readonly` for immutable properties

## Express-Specific Guidelines

### Project Structure

```
src/
  routes/
    {resource}/
      index.ts
      controller.ts
      validators.ts
  middleware/
    auth.ts
    errorHandler.ts
    requestLogger.ts
    validateRequest.ts
  services/
    {domain}Service.ts
  models/
    {entity}.ts
  types/
    express.d.ts
    index.ts
  utils/
  config/
  app.ts
  server.ts
```

### Application Setup

```typescript
import express, { Express } from 'express';
import helmet from 'helmet';
import cors from 'cors';
import { errorHandler } from './middleware/errorHandler';
import { requestLogger } from './middleware/requestLogger';
import routes from './routes';

const createApp = (): Express => {
  const app = express();

  // Security middleware
  app.use(helmet());
  app.use(cors());

  // Body parsing
  app.use(express.json());
  app.use(express.urlencoded({ extended: true }));

  // Request logging
  app.use(requestLogger);

  // Routes
  app.use('/api', routes);

  // Error handling (must be last)
  app.use(errorHandler);

  return app;
};

export default createApp;
```

### Middleware Patterns

- Use middleware for cross-cutting concerns
- Chain middleware in order of execution
- Handle errors in dedicated error middleware

```typescript
import { Request, Response, NextFunction } from 'express';

// Request logging middleware
const requestLogger = (req: Request, res: Response, next: NextFunction): void => {
  const start = Date.now();

  res.on('finish', () => {
    const duration = Date.now() - start;
    console.log(`${req.method} ${req.path} ${res.statusCode} ${duration}ms`);
  });

  next();
};

// Authentication middleware
const authenticate = async (req: Request, res: Response, next: NextFunction): Promise<void> => {
  try {
    const token = req.headers.authorization?.split(' ')[1];

    if (!token) {
      res.status(401).json({ error: 'No token provided' });
      return;
    }

    const user = await verifyToken(token);
    req.user = user;
    next();
  } catch (error) {
    res.status(401).json({ error: 'Invalid token' });
  }
};
```

### Routing

- Organize routes by resource
- Use Router for modular route definitions
- Apply middleware at appropriate levels

```typescript
import { Router } from 'express';
import { authenticate } from '../middleware/auth';
import { validateRequest } from '../middleware/validateRequest';
import { createUserSchema, updateUserSchema } from './validators';
import * as controller from './controller';

const router = Router();

router.get('/', controller.listUsers);
router.get('/:id', controller.getUser);
router.post('/', validateRequest(createUserSchema), controller.createUser);
router.put('/:id', authenticate, validateRequest(updateUserSchema), controller.updateUser);
router.delete('/:id', authenticate, controller.deleteUser);

export default router;
```

### Request Validation

- Validate all incoming requests
- Use Zod for schema definition and validation
- Create reusable validation middleware

```typescript
import { z } from 'zod';
import { Request, Response, NextFunction } from 'express';

const createUserSchema = z.object({
  body: z.object({
    name: z.string().min(1),
    email: z.string().email(),
    password: z.string().min(8),
  }),
});

const validateRequest = (schema: z.ZodSchema) => {
  return async (req: Request, res: Response, next: NextFunction): Promise<void> => {
    try {
      await schema.parseAsync({
        body: req.body,
        query: req.query,
        params: req.params,
      });
      next();
    } catch (error) {
      if (error instanceof z.ZodError) {
        res.status(400).json({
          error: 'Validation failed',
          details: error.errors,
        });
        return;
      }
      next(error);
    }
  };
};
```

### Error Handling

- Create custom error classes
- Use centralized error handler middleware
- Return consistent error responses

```typescript
class AppError extends Error {
  constructor(
    public statusCode: number,
    public message: string,
    public code: string = 'INTERNAL_ERROR'
  ) {
    super(message);
    this.name = 'AppError';
  }
}

class NotFoundError extends AppError {
  constructor(resource: string) {
    super(404, `${resource} not found`, 'NOT_FOUND');
  }
}

// Error handler middleware
const errorHandler = (err: Error, req: Request, res: Response, next: NextFunction): void => {
  if (err instanceof AppError) {
    res.status(err.statusCode).json({
      error: err.code,
      message: err.message,
    });
    return;
  }

  console.error(err);
  res.status(500).json({
    error: 'INTERNAL_ERROR',
    message: 'An unexpected error occurred',
  });
};
```

### TypeScript Extensions

Extend Express types for custom properties:

```typescript
// types/express.d.ts
import { User } from '../models/User';

declare global {
  namespace Express {
    interface Request {
      user?: User;
      requestId?: string;
    }
  }
}
```

### Security Best Practices

- Use helmet for security headers
- Implement rate limiting
- Sanitize user inputs
- Use HTTPS in production
- Implement CORS properly

```typescript
import helmet from 'helmet';
import rateLimit from 'express-rate-limit';

app.use(helmet());

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 100, // limit each IP to 100 requests per windowMs
});

app.use('/api', limiter);
```

### Testing

- Use Jest with supertest for integration tests
- Test middleware in isolation
- Mock external dependencies

```typescript
import request from 'supertest';
import createApp from '../app';

describe('Users API', () => {
  const app = createApp();

  it('should create a user', async () => {
    const response = await request(app)
      .post('/api/users')
      .send({ name: 'John', email: '[email protected]', password: 'password123' })
      .expect(201);

    expect(response.body).toHaveProperty('id');
    expect(response.body.name).toBe('John');
  });
});
```

© Mindrally · Apache-2.0 · Mindrally/skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой