Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
29 changes: 24 additions & 5 deletions .github/workflows/update-external-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,14 @@ jobs:
with:
persist-credentials: false

- name: Set up Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: '24.13'

- name: Install dependencies
run: npm ci

# see all the options at https://github.com/crowdin/github-action
- name: Crowdin PR
uses: crowdin/github-action@60debf382ee245b21794321190ad0501db89d8c1 # https://github.com/crowdin/github-action/releases/tag/v2.13.0
Expand All @@ -112,12 +120,23 @@ jobs:
upload_translations: false
download_translations: true
localization_branch_name: crowdin/translations
create_pull_request: true
pull_request_title: 'i18n: new crowdin translations'
pull_request_body: >
New Crowdin translations from the [express.js crowdin project](https://express.crowdin.com/u/projects/1). cc: @expressjs/docs-wg
pull_request_base_branch_name: 'redesign' # TODO: update to "main" when we merge redesign into main
create_pull_request: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}

- name: Format files
run: npm run format

- name: Create Pull Request
uses: gr2m/create-or-update-pull-request-action@b65137ca591da0b9f43bad7b24df13050ea45d1b # v1.10.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
commit-message: 'i18n: new crowdin translations'
title: 'i18n: new crowdin translations'
body: >
New Crowdin translations from the [express.js crowdin project](https://express.crowdin.com/u/projects/1). cc: @expressjs/docs-wg
labels: docs
branch: crowdin/translations
3 changes: 3 additions & 0 deletions netlify.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
[build]
command = "npm run build"
publish = "dist"

[build.environment]
NODE_OPTIONS = "--max-old-space-size=4096"
43 changes: 43 additions & 0 deletions src/content/docs/de/4x/advanced/developing-template-engines.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
title: Template-Engines für Express entwickeln
description: Erfahren Sie, wie Sie mithilfe von app.engine() benutzerdefinierte Template-Engines für Express.js entwickeln können, mit Beispielen zur Erstellung und Integration Ihrer eigenen Template-Rendering-Logik.
---

Benutze die `app.engine(ext, callback)` Methode, um deine eigene Template-Engine zu erstellen. `ext` bezieht sich auf die Dateierweiterung, und `callback` ist die Template-Engine-Funktion, , die die folgenden Elemente als Parameter akzeptiert: den Speicherort der Datei, das Optionsobjekt und die Callback-Funktion.

Der folgende Code ist ein Beispiel für die Implementierung einer sehr einfachen Template-Engine zum Rendern von `.ntl` Dateien.

```js
const fs = require('fs'); // this engine requires the fs module
app.engine('ntl', (filePath, options, callback) => {
// define the template engine
fs.readFile(filePath, (err, content) => {
if (err) return callback(err);
// this is an extremely simple template engine
const rendered = content
.toString()
.replace('#title#', `<title>${options.title}</title>`)
.replace('#message#', `<h1>${options.message}</h1>`);
return callback(null, rendered);
});
});
app.set('views', './views'); // specify the views directory
app.set('view engine', 'ntl'); // register the template engine
```

Deine App wird nun in der Lage sein, `.ntl`-Dateien zu rendern. Erstelle eine Datei namens `index.ntl` im `views` Verzeichnis mit folgendem Inhalt.

```pug
#title#
#message#
```

Erstellen Sie dann die folgende Route in Ihrer App.

```js
app.get('/', (req, res) => {
res.render('index', { title: 'Hey', message: 'Hello there!' });
});
```

Wenn du eine Anfrage an die Startseite stellt, wird `index.ntl` als HTML dargestellt.
104 changes: 104 additions & 0 deletions src/content/docs/de/4x/guide/behind-proxies.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
---
title: Express hinter Proxies
description: Lernen Sie, wie Sie Express.js Anwendungen so konfigurieren, dass sie hinter Reverse Proxies korrekt arbeiten, einschließlich der Trust-Proxy-Einstellung für Client-IP-Adressen.
---

import Alert from '@components/primitives/Alert/Alert.astro';

Wenn Sie eine Express-App hinter einem Reverse Proxy ausführen, können einige der Express-APIs andere Werte als erwartet zurückgeben. Um dies anzupassen die Einstellung `trust proxy` kann verwendet werden, um Informationen auszublenden, die vom Reverse Proxy in den Express API bereitgestellt werden. Das häufigste Problem sind Express-APIs, die die IP-Adresse des Clients offenlegen, statt dessen eine interne IP-Adresse des Reverse Proxy anzeigen.

<Alert type="info">

Bei der Konfiguration der `trust proxy` Einstellung ist es wichtig, das genaue Setup des
Reverse Proxy zu verstehen. Da diese Einstellung den in der Anfrage angegebenen Werten vertrauen wird Es ist wichtig, dass
die Kombination der Einstellung in Express mit der Funktionsweise des Reverse Proxy übereinstimmt.

</Alert>

Die Anwendungseinstellung `trust proxy` kann auf einen der in der folgenden Tabelle aufgelisteten Werte gesetzt werden.

<table class="doktierbar" border="1" markdown="1">
<thead><tr><th>Typ</th><th>Wert</th></tr></thead>
<tbody>
<tr>
<td>Boolean</td>
<td markdown="1">
Wenn `true`, wird die IP-Adresse des Clients als linker Eintrag im `X-Forwarded-For` Header verstanden.

Falls „falsch“ die App als direkt gegenüber dem Client verstanden wird und die IP-Adresse des Clients von „req.socket.remoteAddress“ abgeleitet wird. Dies ist die Standardeinstellung.

<Alert type="warnung">
Wenn Sie auf `true` setzen, ist es wichtig sicherzustellen, dass der letzte Reverse Proxy alle folgenden HTTP-Header löscht/überschreibt: `X-Forwarded-For`, `X-Forwarded-Host` und `X-Forwarded-Proto`, andernfalls ist es möglich, dass der Client irgendeinen Wert angibt.
</Alert>
</td>
</tr>
<tr>
<td>IP-Adressen</td>
<td markdown="1">
Eine IP-Adresse, ein Subnetz oder ein Array von IP-Adressen und Subnetzen, die darauf vertrauen, dass es sich um einen Reverse Proxy handelt. Die folgende Liste zeigt die vorkonfigurierten Subnetznamen an:

- loopback - `127.0.0.1/8`, `::1/128`
- linklocal - `169.254.0.0/16`, `fe80::/10`
- uniquelocal - `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `fc00::/7`

Sie können IP-Adressen auf jede der folgenden Arten festlegen:

```js
app.set('trust proxy', 'loopback'); // ein einzelnes Subnetz
app.set('trust proxy', 'loopback, 123.123.123.123''); // ein Subnetz und eine Adresse
angeben. et('trust proxy', 'loopback, linklocal, uniquelocal'); // mehrere Subnetze als CSV
app.set('trust proxy', ['loopback', 'linklocal', 'uniquelocal']); // mehrere Subnetze als Array angeben
```

Wenn angegeben, werden die IP-Adressen oder Subnetze vom Prozess der Adressermittlung ausgeschlossen und die dem Anwendungsserver nächstgelegene nicht vertrauenswürdige IP-Adresse wird als IP-Adresse des Clients ermittelt. Dies funktioniert indem überprüft wird, ob `req.socket.remoteAddress` vertrauenswürdig ist. Wenn ja, dann wird jede Adresse in `X-Forwarded-For` von rechts nach links bis zur ersten Adresse überprüft, die nicht vertrauenswürdig ist.

</td>
</tr>
<tr>
<td>Nummer</td>
<td markdown="1">
Benutzen Sie die Adresse, die höchstens `n` von der Express-Anwendung entfernt ist. `req.socket.remoteAddress` ist der erste Hop, und der Rest wird im `X-Forwarded-For` Header von rechts nach links gesucht. Ein Wert von `0` bedeutet, dass die erste nicht vertrauenswürdige Adresse `req.socket.remoteAddress` ist, d.h. es gibt keinen Reverse-Proxy.

<Alert type="warnung">
Bei der Verwendung dieser Einstellung ist es wichtig sicherzustellen, dass es keine Multiple gibt, verschiedene Pfade zur Express-Anwendung, so dass der Client kleiner sein kann als die konfigurierte Anzahl von Hops, die entfernt sind andernfalls kann es möglich sein, dass der Kunde irgendeinen Wert angibt.
</Alert>
</td>
</tr>
<tr>
<td>Funktion</td>
<td markdown="1">
Benutzerdefinierte Vertrauens-Implementierung.

```js
app.set('trust proxy', (ip) => {
if (ip === '127.0.0.1' || ip === '123.123.123. 23')
return true; // vertrauenswürdige IPs
else return false;
});
```

</td>
</tr>
</tbody>
</table>

Das Aktivieren von `trust proxy` hat folgende Auswirkungen:

<ul>
<li markdown="1">
Der Wert von [req.hostname](/en/api#req.hostname) wird vom Wert abgeleitet, der im
`X-Forwarded-Host` Header gesetzt wurde , die vom Client oder vom Proxy gesetzt werden kann.
</li>
<li markdown="1">
`X-Forwarded-Proto` kann vom Reverse Proxy gesetzt werden, um der App mitzuteilen, ob es `https`
oder `http` oder sogar ein ungültiger Name ist. Dieser Wert wird von [req.protocol]reflektiert
(/en/api#req.protocol).
</li>
<li markdown="1">
Die Werte [req.ip](/en/api#req.ip) und [req.ips](/en/api#req.ips) werden auf der Basis der
Socket-Adresse und des `X-Forwarded-For` Headers gefüllt beginnend an der ersten nicht
vertrauenswürdigen Adresse.
</li>
</ul>

Die `trust proxy` Einstellung ist mit dem [proxy-addr](https://www.npmjs.com/package/proxy-addr) Paket implementiert. Weitere Informationen finden Sie in der Dokumentation.
124 changes: 124 additions & 0 deletions src/content/docs/de/4x/guide/debugging.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
---
title: Debuggen Express
description: Erfahren Sie, wie Sie Debugging-Logs in Express.js-Anwendungen aktivieren und nutzen können, indem Sie die DEBUG-Umgebungsvariable für verbesserte Fehlerbehebung setzen.
---

import Alert from '@components/primitives/Alert/Alert.astro';

Um alle internen Logs zu sehen, die in Express verwendet werden, setzen Sie die Umgebungsvariable `DEBUG` auf
`express:*` beim Starten Ihrer App.

```bash
$ DEBUG=Express:* node index.js
```

Verwenden Sie unter Windows den entsprechenden Befehl.

```bash
> $env:DEBUG = "Express:*"; node index.js
```

Das Ausführen dieses Befehls auf der vom [Express-Generator] generierten Standard-App (/en/starter/generator) gibt folgende Ausgabe aus:

```bash
$ DEBUG=express:* node ./bin/www
express:router:route new / +0ms
express:router:layer new / +1ms
express:router:route get / +1ms
express:router:layer new / +0ms
express:router:route new / +1ms
express:router:layer new / +0ms
express:router:route get / +0ms
express:router:layer new / +0ms
express:application compile etag weak +1ms
express:application compile query parser extended +0ms
express:application compile trust proxy false +0ms
express:application booting in development mode +1ms
express:router use / query +0ms
express:router:layer new / +0ms
express:router use / expressInit +0ms
express:router:layer new / +0ms
express:router use / favicon +1ms
express:router:layer new / +0ms
express:router use / logger +0ms
express:router:layer new / +0ms
express:router use / jsonParser +0ms
express:router:layer new / +1ms
express:router use / urlencodedParser +0ms
express:router:layer new / +0ms
express:router use / cookieParser +0ms
express:router:layer new / +0ms
express:router use / stylus +90ms
express:router:layer new / +0ms
express:router use / serveStatic +0ms
express:router:layer new / +0ms
express:router use / router +0ms
express:router:layer new / +1ms
express:router use /users router +0ms
express:router:layer new /users +0ms
express:router use / &lt;anonymous&gt; +0ms
express:router:layer new / +0ms
express:router use / &lt;anonymous&gt; +0ms
express:router:layer new / +0ms
express:router use / &lt;anonymous&gt; +0ms
express:router:layer new / +0ms
```

Wenn eine Anfrage an die App gestellt wird, sehen Sie die im Express-Code angegebenen Protokolle:

```bash
express :router dispatching GET / +4h
express :router query : / +2ms
express :router expresInit : / +0ms
express:router favicon : / +0ms
express :router logger : / +1ms
express :router jsonParser : / +0ms
express:router urlencodedParser : / +1ms
express :router cookieParser : / +0ms
express:router stylus : / +0ms
express :router serveStatic : / +2ms
express :router router router : / +2ms
express:router dispatching GET / +1ms
express:view lookup "index. ug" +338ms
express:view stat "/projects/example/views/index.pug" +0ms
express:view render "/projects/example/views/index.pug" +1ms
```

Um die Protokolle nur von der Router-Implementierung zu sehen, setzen Sie den Wert `DEBUG` auf `express:router`. Um Protokolle nur von der Anwendungsimplementierung zu sehen, setzten Sie den Wert von `DEBUG` auf `express:application`, und so weiter.

## Anwendungen generiert von `Express`

Eine Anwendung, die durch den Befehl `express generiert` erzeugt wird, benutzt das Modul `debug` und sein Debug-Namensraum wird auf den Namen der Anwendung übertragen.

Wenn Sie zum Beispiel die App mit `$ express Beispiel-App` erstellt haben, können Sie die Debug-Anweisungen mit folgendem Befehl aktivieren:

```bash
$ DEBUG=Beispiel-app:* Knoten ./bin/www
```

Sie können mehr als einen Debug-Namensraum angeben, indem Sie eine kommaseparierte Namensliste zuweisen:

```bash
$ DEBUG=http,mail,Express:* node index.js
```

## Erweiterte Optionen

Wenn Sie über Node.js laufen, können Sie ein paar Umgebungsvariablen festlegen, die das Verhalten der Debug-Protokollierung ändern:

| Name | Zweck |
| ------------------- | --------------------------------------------------------------------------- |
| `DEBUG` | Aktiviere/deaktiviert bestimmte Debugging-Namensräume. |
| DEBUG_COLORS | Gibt an, ob Farben in der Debug-Ausgabe verwendet werden sollen oder nicht. |
| DEBUG_DEPTH\` | Objektüberprüfungstiefe. |
| `DEBUG_FD` | Datei-Deskriptor, in den die Debug-Ausgabe geschrieben wird. |
| `DEBUG_SHOW_HIDDEN` | Zeigt versteckte Eigenschaften auf untersuchten Objekten. |

<Alert type="info">

Die Umgebungsvariablen, die mit `DEBUG_` beginnen, werden am Ende in ein Optionsobjekt
konvertiert, das mit `%o`/`%O` Formate verwendet wird. Siehe die Dokumentation von Node.js für
[`util.inspect()`](https://nodejs.org/api/util#util_util_inspect_object_options) für die vollständige
Liste.

</Alert>
Loading
Loading