Umstieg von Express oder Spring
Diese Seite richtet sich an Entwickler, die Webanwendungen mit Express oder NestJS auf Node.js oder mit Spring und Spring Boot auf der JVM bauen. Die größte Umstellung ist nicht die Sprache, sondern das Prozessmodell; danach haben die meisten Konzepte eine Entsprechung, einige, auf die sich Spring-Entwickler verlassen (ein DI-Container, Annotationen), jedoch nicht.
Inhalt
Das Prozessmodell
| Express, NestJS | Spring | Exponential 6 | |
|---|---|---|---|
| Prozess | ein langlebiger Prozess, Event-Loop | langlebige JVM, ein Thread pro Request | PHP-FPM: ein frischer Durchlauf pro Request; Velocity: persistente Worker, jeder mit jeweils einem Request |
| Zustand zwischen Requests | im Speicher, gemeinsam | Singletons, gemeinsam | keiner unter PHP-FPM; pro Worker unter Velocity, worauf Sie sich nicht verlassen dürfen |
| Nebenläufigkeit innerhalb eines Requests | asynchrone I/O | Threads, reaktive Stacks | synchron; langsame Arbeit geht in eine Warteschlange |
| Echtzeit | WebSockets | WebSocket-Unterstützung | WebSockets und Server-Sent Events von Velocity (Velocity-WebSockets) |
Unter Velocity ähneln die Regeln denen eines langlebigen Prozesses: Setzen Sie den Zustand pro Request zurück, und registrieren Sie Listener nur einmal (Server und Deployment).
Gegenüberstellung
| Express / NestJS | Spring | Exponential 6 | Seite |
|---|---|---|---|
app.get(), Controller mit Decorators | @RequestMapping | Views in module.php | Routing |
| Middleware, Guards, Interceptors | Filter, HandlerInterceptor | Request-Regeln, Listener, Runnable-Ereignisse | Middleware |
| NestJS-Provider | Beans, @Autowired | kein Container; Handler-Klassen aus INI | Dependency Injection |
| ein ORM (TypeORM, Prisma, Sequelize) | JPA, Hibernate, Spring Data | Inhalts-API; eZPersistentObject | ORM |
.env, Konfigurationsmodule | application.yml, Profile | INI-Dateien, EXP_ENV | Konfiguration |
| Passport.js, Guards | Spring Security | Login-Handler, Rollen und Richtlinien | Authentifizierung, Autorisierung |
| Template-Engines (EJS, Pug, Handlebars) | Thymeleaf | die Template-Sprache | Die View-Schicht |
| Job-Warteschlangen (BullMQ) | @Async, JMS, Spring Batch | expqueue, Inhalts-Jobs | Warteschlangen |
| node-cron | @Scheduled | Cronjob-Teile | Geplante Aufgaben |
| EventEmitter | ApplicationEventPublisher | ezpEvent | Ereignisse |
| npm-Skripte, CLIs | CommandLineRunner | bin/php/console | Kommandozeile |
| Jest, Supertest | JUnit, MockMvc | PHPUnit, HTTP-Prüfungen | Testen |
Ihr Frontend behalten
Viele Teams aus diesen Ökosystemen behalten ein JavaScript- oder Java-Frontend und nutzen Exponential als Inhalts-Backend: die REST-API für Inhalte, OAuth2 oder API-Schlüssel als Zugangsdaten, Redakteure in der Administrationsoberfläche (Headless und entkoppelte Frontends, REST- und JSON-APIs).
Was Ihnen fehlen wird
- Annotationen oder Decorators für Routen, Sicherheit und Transaktionen.
- Ein DI-Container und typisierte Konfigurationseigenschaften.
- Asynchrone I/O im selben Prozess; verwenden Sie Warteschlangen für langsame Aufrufe.
- Generierte API-Dokumentation (OpenAPI) für die REST-API.
Verwandte Seiten
- Begriffswörterbuch
- Wann Sie Exponential wählen sollten
- PHP-Entwickler: hier beginnen
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.