12 промтов для Node.js и Express: REST API, middleware и авторизация

12 промтов для Node.js и Express: REST API, middleware и авторизация

Разработка на Node.js и Express сегодня немыслима без помощи AI-ассистентов. Но чтобы ChatGPT или GitHub Copilot выдали действительно рабочий код, нужно уметь формулировать промты — инструкции на естественном языке. Ошибка в промте — и вы получаете устаревший код, конфликтующие библиотеки или дыру в безопасности. В этой подборке — 12 проверенных промтов, которые я использую в своей ежедневной работе. Они покрывают создание REST API, middleware, аутентификацию и авторизацию, а также WebSocket-функциональность. Скопируйте нужный промт, адаптируйте под свой проект — и вы сэкономите часы времени.

Как правильно писать промты для Node.js

Прежде чем перейти к промтам, договоримся о структуре. Эффективный промт должен содержать:

  • Контекст: какое приложение вы создаете, какие библиотеки уже используете.
  • Требования: конкретные endpoints, параметры, формат ответа.
  • Ограничения: например, версию Node.js (18+, 20+), способ хранения данных, предпочтения по стилю кода.
  • Пример ожидаемого результата: описание или фрагмент кода.

Чем точнее промт, тем качественнее ответ. А теперь — к делу. Ниже таблица библиотек, которые упоминаются в подборке:

Библиотека Назначение Документация
Express Фреймворк для веб-приложений expressjs.com
Joi Валидация данных github.com/hapijs/joi
jsonwebtoken JWT-аутентификация github.com/auth0/node-jsonwebtoken
Socket.io WebSocket-сервер socket.io
Morgan Логирование запросов github.com/expressjs/morgan
CORS Middleware для доступа между доменами github.com/expressjs/cors
Swagger Документация API swagger.io
Jest + Supertest Тестирование jestjs.io, github.com/ladjs/supertest

Далее идут сами промты. Для каждого я указал, какую задачу он решает, привел готовый текст и пример ответа.

Промты для REST API

Промт №1: Генерация каркаса Express-приложения с CRUD

Назначение: получить базу для REST API с методами создания, получения, обновления и удаления сущности.

Промт:

«Сгенерируй Express-приложение для управления пользователями. Мне нужен REST API с endpoints: GET /users, GET /users/:id, POST /users, PUT /users/:id, DELETE /users/:id. Используй in-memory хранилище (массив объектов). Раздели код на routes и controllers. Подключи express.json() для парсинга тела запроса. Выведи полный код всех файлов.»

Как использовать: укажите свою сущность (например, «книги», «заказы»), добавьте параметры пагинации, если нужно.

Пример ответа:

// app.js
const express = require('express');
const userRoutes = require('./routes/userRoutes');
const app = express();
app.use(express.json());
app.use('/users', userRoutes);
app.listen(3000);
// routes/userRoutes.js
const router = require('express').Router();
const userController = require('../controllers/userController');
router.get('/', userController.getUsers);
router.get('/:id', userController.getUserById);
router.post('/', userController.createUser);
router.put('/:id', userController.updateUser);
router.delete('/:id', userController.deleteUser);
module.exports = router;

Этот промт экономит время, но не защищает от ошибок. Следующие промты добавят валидацию и обработку ошибок.

Промт №2: Middleware для валидации запросов с Joi

Назначение: создать middleware, который проверяет тело запроса перед передачей обработчику.

Промт:

«Создай middleware validate для Express с использованием Joi. Он должен принимать схему и проверять req.body, req.params и req.query. Если данные не проходят валидацию, возвращай 400 с детальным списком ошибок. Покажи пример схемы для создания пользователя (name, email, age).»

Пример ответа:

// middleware/validate.js
const validate = (schema) => (req, res, next) => {
  const { error } = schema.validate(req.body, { abortEarly: false });
  if (error) {
    return res.status(400).json({ errors: error.details.map(d => d.message) });
  }
  next();
};

Как использовать: примените в маршрутах: router.post('/', validate(schema), userController.createUser). Joi — стандарт де-факто для валидации в Node.js, поэтому он выбран неслучайно.

Промт №3: Централизованная обработка ошибок

Назначение: единый интерфейс для ошибок в Express.

Промт:

«Создай middleware для обработки ошибок в Express. Он должен перехватывать все ошибки, логировать их и возвращать JSON в формате { error: "сообщение" }. Также добавь обработчик 404 и обертку для асинхронных функций. Используй класс ApiError для создания ошибок с HTTP-статусом.»

Пример ответа:

// middleware/errorHandler.js
class ApiError extends Error {
  constructor(status, message) {
    super(message);
    this.status = status;
  }
}
const errorHandler = (err, req, res, next) => {
  const { status = 500, message } = err;
  if (status === 500) console.error(err.stack);
  res.status(status).json({ error: message });
};

Правильная обработка ошибок критична для API — без неё клиент получает неинформативные 500, а разработчик — пустые логи.

Промты для middleware

Промт №4: Настройка CORS

Назначение: разрешить доступ к API только с нужных доменов.

Промт:

«Настрой CORS для Express-приложения. Разреши запросы только с доменов https://example.com и http://localhost:3000. Используй пакет cors и методы GET, POST, PUT, DELETE. Выведи код подключения в app.js.»

Пример ответа:

const cors = require('cors');
const allowedOrigins = ['https://example.com', 'http://localhost:3000'];
app.use(cors({ origin: allowedOrigins }));

Без настройки CORS ваш API может стать жертвой межсайтовых атак или, наоборот, быть недоступным для легитимных клиентов.

Промт №5: Логирование запросов через Morgan

Назначение: видеть все входящие запросы в консоли.

Промт:

«Создай middleware для логирования HTTP-запросов с помощью morgan. Выбери формат "combined", в который входит IP, метод, URL, статус, размер ответа. Включи его сразу после создания приложения.»

Пример ответа:

const morgan = require('morgan');
app.use(morgan('combined'));

Формат combined — это стандарт для продакшена: он совместим с большинством систем сбора логов, такими как ELK.

Промты для аутентификации и авторизации

Промт №6: JWT-аутентификация с login-маршрутом

Назначение: реализовать выдачу и проверку токенов.

Промт:

«Реализуй аутентификацию с помощью jsonwebtoken. Создай маршрут POST /auth/login, который принимает email и пароль, находит пользователя в массиве (или БД) и возвращает JWT-токен с id пользователя в payload. Создай middleware verifyToken, который читает заголовок Authorization (Bearer token), проверяет подпись и добавляет req.user. Выведи код маршрута и middleware.»

Пример ответа:

// routes/auth.js
const jwt = require('jsonwebtoken');
router.post('/login', (req, res) => {
  const user = users.find(u => u.email === req.body.email && u.password === req.body.password);
  if (!user) return res.status(401).json({ error: 'Invalid credentials' });
  const token = jwt.sign({ id: user.id }, process.env.JWT_SECRET, { expiresIn: '1h' });
  res.json({ token });
});
// middleware/verifyToken.js
const jwt = require('jsonwebtoken');
module.exports = (req, res, next) => {
  const header = req.headers.authorization;
  if (!header) return res.status(401).json({ error: 'No token provided' });
  const token = header.split(' ')[1];
  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    req.user = decoded;
    next();
  } catch (err) {
    res.status(401).json({ error: 'Invalid token' });
  }
};

Не забудьте установить переменные окружения, а также использовать bcrypt для хеширования паролей — в промте можно добавить это требование.

Промт №7: Ролевая авторизация (RBAC)

Назначение: ограничить доступ к маршрутам по ролям (admin, user, etc.).

Промт:

«Добавь ролевую модель в Express. У пользователя есть массив roles: ["admin", "user"]. Создай middleware requireRole(role), который проверяет, есть ли у req.user нужная роль. Если нет — возвращай 403. Пример: маршрут DELETE /users/:id должен быть доступен только админу. Примени этот middleware к маршруту.»

Пример ответа:

const requireRole = (role) => (req, res, next) => {
  if (!req.user?.roles?.includes(role)) {
    return res.status(403).json({ error: 'Forbidden' });
  }
  next();
};
router.delete('/:id', verifyToken, requireRole('admin'), userController.deleteUser);

Обратите внимание на порядок middleware: сначала проверка токена, потом роли.

Промты для WebSocket

Промт №8: Чат на Socket.io

Назначение: создать мгновенный обмен сообщениями.

Промт:

«Создай WebSocket-сервер на Socket.io для чата. Интегрируй его с Express. Когда клиент отправляет событие "message" с текстом, сервер должен транслировать это сообщение всем подключенным клиентам. Используй комнаты, чтобы пользователи могли общаться в отдельных каналах. Покажи код сервера и пример клиентской части на HTML/JS.»

Пример ответа:

const http = require('http');
const server = http.createServer(app);
const io = new Server(server);
io.on('connection', (socket) => {
  socket.join('general');
  socket.on('message', (data) => {
    io.to('general').emit('message', { user: socket.id, text: data.text });
  });
});
server.listen(3000);

WebSocket-функциональность превращает скучный REST-сервер в реальное приложение с push-уведомлениями и чатом.

Промт №9: Отправка уведомлений через WebSocket

Назначение: таргетированные уведомления конкретному пользователю.

Промт:

«Реализуй систему уведомлений на Socket.io. При подключении пользователь передаёт свой userId. Сервер хранит соответствие userId и socket.id в Map. Когда событие "notification" с userId и сообщением отправляется, сервер находит активное соединение и отправляет событие "new-notification" этому пользователю.»

Пример ответа:

const onlineUsers = new Map();
io.on('connection', (socket) => {
  socket.on('register', (userId) => onlineUsers.set(String(userId), socket.id));
});
function notify(userId, payload) {
  const socket = onlineUsers.get(String(userId));
  if (socket) io.to(socket).emit('new-notification', payload);
}

Таким образом вы можете отправлять уведомления о новых заказах, сообщениях и других событиях в реальном времени.

Дополнительные промты для продакшена

Промт №10: Пагинация и фильтрация в GET-списках

Назначение: сделать API удобным для работы с большими объёмами данных.

Промт:

«Добавь пагинацию и фильтрацию в маршрут GET /users. Параметры: page (1), limit (10), sortBy (name), filter (email). Возвращай объект: { data, total, page, totalPages }. Для фильтрации используй query-параметр filter, например ?filter=email:test@test.com.»

Пример ответа:

function paginate(data, { page = 1, limit = 10 } = {}) {
  const offset = (page - 1) * limit;
  return { data: data.slice(offset, offset + limit), total: data.length, page, totalPages: Math.ceil(data.length / limit) };
}

Промт №11: Документация API со Swagger

Назначение: автоматически генерировать документацию для ваших endpoints.

Промт:

«Создай Swagger-документацию для существующего Express API. Используй swagger-jsdoc и swagger-ui-express. Опиши в комментариях все endpoints: параметры, тело запроса, ответы, схемы. Подключи UI на /api-docs.»

Пример ответа:

const swaggerJsdoc = require('swagger-jsdoc');
const swaggerUi = require('swagger-ui-express');
const options = { definition: { openapi: '3.0.0', info: { title: 'API', version: '1.0.0' } }, apis: ['./routes/*.js'] };
const swaggerSpec = swaggerJsdoc(options);
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));

После добавления комментариев в JSDoc-стиле документация будет обновляться автоматически.

Промт №12: Тестирование API с Jest и Supertest

Назначение: покрыть базовые сценарии работы API автотестами.

Промт:

«Напиши тесты для Express-приложения с использованием Jest и Supertest. Покрой следующие сценарии: успешное получение списка пользователей, создание нового пользователя, возврат 404 для несуществующего id, проверка валидации при неверных данных. После тестов закрывай сервер, чтобы процесс завершился.»

Пример ответа:

const request = require('supertest');
const app = require('../app');

afterAll(() => {
  server.close();
});

describe('GET /users', () => {
  it('should return 200 and array', async () => {
    const res = await request(app).get('/users');
    expect(res.statusCode).toBe(200);
    expect(Array.isArray(res.body)).toBe(true);
  });
});

Автотесты — это страховка от регрессий при изменениях кода. Даже простой smoke-тест уже окупается.

Как проверить качество промтов

Я часто тестирую промты на трёх критериях:
- Код запускается без ошибок после установки зависимостей.
- Соблюдены все требования из промта (порядок middleware, названия переменных).
- Код легко расширяется — нет хардкода, используются переменные окружения.

Если что-то не так — уточните промт: добавьте версию Node.js, используемую базу данных, требования к безопасности (например, «используй Helmet»).

Заключение

Промты из этой подборки покрывают базовый цикл разработки Express-приложения: от создания REST API до авторизации и WebSocket. Сохраняйте статью в закладки, чтобы в один клик получить рабочий код для типовых задач.

Но помните: промт — это лишь отправная точка. Всегда адаптируйте сгенерированный код под свой проект, проверяйте его на безопасность и пишите тесты. Если вы используете эти промты в своей работе, вы заметите, как ускоряется разработка.

Подпишитесь на блог, чтобы не пропустить подборки промтов для NestJS, PostgreSQL и других инструментов.

← Все статьи

Комментарии

Читайте также

Микрофон MAX9814 и INMP441 + ASI Biont: голосовое управление умным домом через AI-агента

10 августа 2026

OPC-UA (SCADA/DCS) + AI-агент ASI Biont: интеграция промышленных данных с интеллектуальной автоматизацией

10 августа 2026

Mobile Security — безопасность мобильных приложений (iOS и Android): практический курс на asibiont.com

10 августа 2026

У ИИ есть душа? Как дать LLM характер и эмоции в ролевых играх

10 августа 2026

Курс по ИИ-автоматизации бизнеса: от ИИ-агентов до бизнес-процессов с измеримым ROI

10 августа 2026

ИИ помогает Airbnb выпускать функции быстрее: новая поисковая функция уже в тестировании

9 августа 2026

Курс Cambridge IGCSE Geography (0460): Освойте население, природную среду и экономическое развитие

9 августа 2026

Интеграция тачскрина (FT6206, XPT2046) с AI-агентом ASI Biont: от ESP32 до промышленных панелей

9 августа 2026

Интеграция IMU / MPU6050 с AI-агентом ASI Biont: робототехника и автоматизация

9 августа 2026