Bibliotheken / ExpressKit

ExpressKit

Leichter Express.js-Wrapper, der sich in NodeKit integriert.

ExpressKit

ExpressKit ist ein leichtgewichtiger express.js-Wrapper, der sich in NodeKit integriert und einige nützliche Funktionen wie Request-Logging, Tracing-Unterstützung, asynchrone Controller & Middleware und detaillierte Routenbeschreibungen bietet.

Installation:

npm install --save @gravity-ui/nodekit @gravity-ui/expresskit

Grundlegende Verwendung:

import {ExpressKit} from '@gravity-ui/expresskit';
import {NodeKit} from '@gravity-ui/nodekit';

const nodekit = new NodeKit();

const app = new ExpressKit(nodekit, {
  'GET /': (req, res) => {
    res.send('Hello World!');
  },
});

app.run();

CSP

config.ts

import type {AppConfig} from '@gravity-ui/nodekit';
import {csp} from '@gravity-ui/expresskit';

const config: Partial<AppConfig> = {
    expressCspEnable: true,
    expressCspPresets: ({getDefaultPresets}) => {
        return getDefaultPresets({defaultNone: true}).concat([
            csp.inline(),
            {csp.directives.REPORT_TO: 'my-report-group'},
        ]);
    },
    expressCspReportTo: [
        {
            group: 'my-report-group',
            max_age: 30 * 60,
            endpoints: [{ url: 'https://cspreport.com/send'}],
            include_subdomains: true,
        }
    ]
}

export default config;

CSRF-Schutz

ExpressKit bietet integrierten Schutz vor Cross-Site Request Forgery (CSRF), um Ihre Anwendungen vor bösartigen Cross-Origin-Anfragen zu sichern. Die CSRF-Middleware generiert und validiert automatisch Tokens für zustandsändernde HTTP-Anfragen.

Grundlegende Konfiguration

Um den CSRF-Schutz zu aktivieren, konfigurieren Sie den geheimen Schlüssel in Ihrer Konfiguration:

import type {AppConfig} from '@gravity-ui/nodekit';

const config: Partial<AppConfig> = {
  // ...
  appCsrfSecret: 'your-secret-key-here',
};

export default config;

Konfigurationsoptionen

OptionTypStandardBeschreibung
appCsrfSecretstring | string[]-Erforderlich. Geheimer Schlüssel (oder Schlüssel) für die HMAC-Token-Generierung. Mehrere Schlüssel ermöglichen die Schlüsselrotation.
appCsrfLifetimenumber2592000 (30 Tage)Token-Lebensdauer in Sekunden. Setzen Sie auf 0 für kein Ablaufdatum.
appCsrfHeaderNamestring'x-csrf-token'Name des HTTP-Headers für die Token-Validierung.
appCsrfMethodsstring[]['POST', 'PUT', 'DELETE', 'PATCH']HTTP-Methoden, die eine CSRF-Validierung erfordern.

Verwendung

Nach der Konfiguration wird der CSRF-Schutz automatisch auf alle Routen mit den angegebenen HTTP-Methoden angewendet:

import {ExpressKit, AuthPolicy} from '@gravity-ui/expresskit';
import {NodeKit} from '@gravity-ui/nodekit';

const nodekit = new NodeKit({
  config: {
    appCsrfSecret: 'your-secret-key',
    appAuthPolicy: AuthPolicy.required,

    // Stellen Sie sicher, dass Ihre Middleware die Benutzer-ID im originalContext setzt,
    // andernfalls schlägt die Generierung des CSRF-Tokens fehl.
    appAuthHandler: yourAuthHandler,
  },
});

const app = new ExpressKit(nodekit, {
  'GET /api/form': (req, res) => {
    // Das Token ist im Request-Kontext verfügbar
    res.json({csrfToken: req.originalContext.get('csrfToken')});
  },

  'POST /api/submit': (req, res) => {
    // Diese Route validiert automatisch das CSRF-Token
    res.json({message: 'Formular erfolgreich gesendet'});
  },
});

Routenspezifische Konfiguration

Sie können den CSRF-Schutz für bestimmte Routen deaktivieren:

const app = new ExpressKit(nodekit, {
  'POST /api/webhook': {
    authPolicy: AuthPolicy.required,
    disableCsrf: true, // CSRF für diese Route deaktivieren
    handler: (req, res) => {
      res.json({message: 'Webhook verarbeitet'});
    },
  },
});
Über die Bibliothek
Sterne
5
Version
2.8.0
Letzte Aktualisierung
13.10.2025
Repository
github.com/gravity-ui/expresskit
Lizenz
MIT License
Betreuer
Mitwirkende