Оглавление

Cloudflare представила поддержку node:http API в своей serverless платформе Workers, что позволяет запускать Express.js, Koa и другие Node.js приложения без переписывания кода. Это серьезно упрощает миграцию унаследованных приложений на периферийную инфраструктуру с глобальным масштабированием и нулевым временем холодного старта.

Технические вызовы интеграции

Основная сложность заключалась в фундаментальном различии архитектур: традиционные Node.js приложения работают с TCP-соединениями, в то время как Cloudflare Workers используют полностью управляемую сетевую инфраструктуру через Open Egress Router и Pingora. Эти системы автоматически обрабатывают TLS, пулы соединений и сетевую оптимизацию.

Вместо прямого доступа к TCP, Cloudflare реализовала абстракцию, где вызов server.listen(port) регистрирует сервер во внутренней таблице Worker, используя номер порта как идентификатор для маршрутизации запросов.

Это классический пример того, как облачные провайдеры постепенно стирают границы между традиционным и serverless-программированием. Вместо того чтобы заставлять разработчиков учить новые API, они приносят знакомые инструменты в свою среду — умный ход с точки зрения скорости внедрения. Интересно, сколько унаследованных express-приложений внезапно обретут вторую жизнь на периферии.

Два подхода к интеграции

Ручное управление через handleAsNodeRequest

Этот метод дает полный контроль над интеграцией и позволяет комбинировать Node.js серверы с другими возможностями Workers:

import { handleAsNodeRequest } from 'cloudflare:node';
import { createServer } from 'node:http';

const server = createServer((req, res) => {
 res.writeHead(200, { 'Content-Type': 'text/plain' });
 res.end('Hello from Node.js HTTP server!');
});

server.listen(8080);

export default {
 async fetch(request) {
 if (request.url.includes('/admin')) {
 return new Response('Admin access', { status: 403 });
 }
 return handleAsNodeRequest(8080, request);
 }
};

Автоматическая интеграция с httpServerHandler

Для простых случаев, когда не нужны дополнительные функции Workers:

import { httpServerHandler } from 'cloudflare:node';
import { createServer } from 'node:http';

const server = createServer((req, res) => {
 if (req.url === '/') {
 res.writeHead(200, { 'Content-Type': 'text/html' });
 res.end('<h1>Welcome to my Node.js app on Workers!</h1>');
 } else {
 res.writeHead(404, { 'Content-Type': 'text/plain' });
 res.end('Not Found');
 }
});

server.listen(8080);

export default httpServerHandler({ port: 8080 });

Поддержка популярных фреймворков

Новая функциональность открывает возможность запуска Express.js, Koa.js и других фреймворков на платформе Cloudflare Workers. Разработчики могут мигрировать существующие приложения практически без изменений кода, получая все преимущества периферийных вычислений:

  • Глобальное распределение
  • Автоматическое масштабирование
  • Отсутствие холодных запусков
  • Снижение задержки для конечных пользователей

По материалам Cloudflare.