Schreibe mir ein Programm in Node.js mit Express und EJS. Ich möchte, dass es ein Verzeichnis rekursiv durchsucht und eine verschachtelte Liste von Dateien und Ordnern als Webseite bereitstellt
Super! Lass uns mit diesem aufregenden Projekt beginnen!

Zuerst müssen wir unser Projekt einrichten, indem wir eine package.json-Datei erstellen und die erforderlichen Abhängigkeiten installieren. Öffne dein Terminal und navigiere zu dem Verzeichnis, in dem du deinen Projektordner erstellen möchtest.

1. Führe `npm init` aus und befolge die Anweisungen, um deine package.json-Datei zu erstellen.
2. Installiere die Abhängigkeiten, indem du `npm install express ejs` ausführst.

Jetzt, da wir unser Projekt eingerichtet haben, erstellen wir unsere Hauptdatei `app.js`.

1. Erforderliche Module wie folgt importieren:

```javascript
const express = require('express');
const ejs = require('ejs');
const path = require('path');
const fs = require('fs');
```

2. Eine Instanz des `express`-Moduls wie folgt erstellen:

```javascript
const app = express();
```

3. Die Ansichtsmaschine einrichten, um `ejs` wie folgt zu verwenden:

```javascript
app.set('view engine', 'ejs');
```

4. Eine Middleware-Funktion erstellen, um statische Dateien aus dem öffentlichen Ordner wie folgt bereitzustellen:

```javascript
app.use(express.static(path.join(__dirname, 'public')));
```

5. Eine Route für die Startseite wie folgt erstellen:

```javascript
app.get('/', (req, res) => {
  const directoryPath = path.join(__dirname, 'public');
  const root = {
    name: 'public',
    children: []
  };
  createTree(directoryPath, root);
  res.render('index', { root });
});
```

6. Eine Funktion erstellen, um das Verzeichnis rekursiv zu durchsuchen und die verschachtelte Datei- und Ordnerstruktur wie folgt zu erstellen:

```javascript
function createTree(directoryPath, node) {
  const files = fs.readdirSync(directoryPath);

  for (const file of files) {
    const filePath = path.join(directoryPath, file);
    const stats = fs.statSync(filePath);

    if (stats.isDirectory()) {
      const directory = {
        name: file,
        children: []
      };
      node.children.push(directory);
      createTree(filePath, directory);
    } else {
      node.children.push({ name: file });
    }
  }
}
```

7. Eine `index.ejs`-Datei im `views`-Ordner erstellen und die verschachtelte Datei- und Ordnerstruktur als ungeordnete Liste wie folgt rendern:

```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Datei-Explorer</title>
</head>
<body>
  <h1>Datei-Explorer</h1>
  <ul>
    <% for (const child of root.children) { %>
      <li>
        <%= child.name %>
        <% if (child.children) { %>
          <ul>
            <% for (const grandChild of child.children) { %>
              <li>
                <%= grandChild.name %>
                <% if (grandChild.children) { %>
                  <ul>
                    <% for (const greatGrandChild of grandChild.children) { %>
                      <li>
                        <%= greatGrandChild.name %>
                        <% if (greatGrandChild.children) { %>
                          <!-- weitere verschachtelte ul-Elemente nach Bedarf hinzufügen -->
                        <% } %>
                      </li>
                    <% } %>
                  </ul>
                <% } %>
              </li>
            <% } %>
          </ul>
        <% } %>
      </li>
    <% } %>
  </ul>
</body>
</html>
```

Das war's! Du hast jetzt ein Programm in Node.js mit Express und EJS, das ein Verzeichnis rekursiv durchsucht und eine verschachtelte Liste von Dateien und Ordnern als Webseite bereitstellt.

Um das Programm auszuführen, führe einfach `node app.js` in deinem Terminal aus und navigiere in deinem Browser zu `http://localhost:3000`.