fix: Platzhalter-Keys nicht als echt werten + Crash-Schutz
- env.js: '…CHANGE-ME'-Platzhalter aus .env.example zählen als NICHT gesetzt. Vorher galt sk_test_CHANGE-ME als echter Stripe-Key → echter API-Call mit ungültigem Key → 401 → unhandledRejection → Server-Crash. - billing.js: /checkout in try/catch → 502 statt Empty-Reply/Crash. - index.js: globaler Express-Error-Handler + unhandledRejection-Guard, damit ein einzelner async-Fehler nie den ganzen Prozess killt. E2E verifiziert (Mock): register→checkout→instance, idempotent (1 sub/1 inst), 401 bei falschem PW, Server lebt nach allen Requests. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -29,6 +29,17 @@ app.get("*", (req, res, next) => {
|
||||
res.sendFile(path.join(dist, "index.html"), (err) => err && next());
|
||||
});
|
||||
|
||||
// Express-Fehlerhandler: fängt synchron geworfene Fehler aus Routen → 500
|
||||
// statt stiller Empty-Reply.
|
||||
app.use((err, _req, res, _next) => {
|
||||
console.error("Unbehandelter Routen-Fehler:", err);
|
||||
if (!res.headersSent) res.status(500).json({ error: "Interner Fehler." });
|
||||
});
|
||||
|
||||
// Letzte Verteidigungslinie: ein einzelner async-Fehler darf den Prozess nicht
|
||||
// killen (im Dev-Test sonst "connection refused" für alle Folge-Requests).
|
||||
process.on("unhandledRejection", (reason) => console.error("unhandledRejection:", reason));
|
||||
|
||||
app.listen(env.port, () => {
|
||||
console.log(`RAPPORT-HOST API läuft auf :${env.port} (Base: ${env.publicBaseUrl})`);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user