0 Daumen
1,2k Aufrufe

Ich entwickle gerade einen einfachen Node.js-Server mit Express, CORS und MySQL. Zusätzlich werden statische Dateien (wie z. B. eine index.html) aus dem public-Ordner ausgeliefert.

Hier ist mein aktueller Code:

`js
const express = require('express');
const cors = require('cors');
const path = require('path');
const mysql = require('mysql');

const app = express();
app.use(cors());

// MySQL-Verbindung
const con = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "forum"
});

// Statische Dateien ausliefern
app.use(express.static(path.join(__dirname, 'public')));

// Test-Route
app.get('/test-connection', (req, res) => {
con.connect(function(err) {
  if (err) {
    res.send('Connection failed: ' + err.message);
  } else {
    res.send('Connected!');
  }
});
});

app.listen(3000, () => {
console.log('Server läuft auf Port 3000');
});

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Analyse der Struktur

Die Struktur, die du für deine Node.js-Anwendung mit Express, MySQL und CORS eingerichtet hast, ist grundsätzlich solide und erfüllt die grundlegenden Anforderungen für eine einfache Web-API. Allerdings gibt es einige Punkte, die du optimieren oder ändern könntest, um die Struktur zu verbessern und Best Practices einzuhalten.

Empfehlungen zur Verbesserung

1. Asynchrone MySQL-Verbindungen:
- Die MySQL-Verbindung sollte nicht im Route-Handler hergestellt werden, da dies bei jeder Anfrage eine neue Verbindung eröffnet. Dies kann ineffizient sein und die Performance deiner Anwendung beeinträchtigen. Stattdessen sollte die Verbindung einmal zu Beginn hergestellt werden und wiederverwendet werden.

2. Error Handling:
- Füge Error Handling für die MySQL-Verbindung hinzu, sodass der Server im Falle von Problemen mit der Datenbankverbindung ordnungsgemäß reagiert.

3. Verwendung von Umgebungsvariablen:
- Momentan sind sensible Informationen wie Datenbankanmeldeinformationen im Quellcode fest programmiert. Verwende Umgebungsvariablen (z.B. mit dotenv), um diese Informationen sicher zu verwalten.

4. Ordnerstruktur:
- Wenn dein Projekt wächst, möchtest du vielleicht deine Routen, Middleware und Diensten in unterschiedliche Dateien oder Ordner aufteilen, um die Lesbarkeit und Wartbarkeit zu erhöhen.

5. Modularisierung der Datenbanklogik:
- Ziehe in Betracht, die Datenbanklogik in eine separate Datei oder ein Modul auszulagern, um den Code sauberer und wiederverwendbarer zu machen.

6. Middleware für JSON-Anfragen:
- Wenn du JSON-Anfragen verarbeiten möchtest, müsstest du das JSON-Parsing Middleware hinzufügen.

Hier ist dein optimierter Code mit einigen der obigen Empfehlungen:

javascript
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const path = require('path');
const mysql = require('mysql');

const app = express();
app.use(cors());
app.use(express.json()); // Middleware für JSON-Anfragen

// MySQL-Verbindung herstellen und Verbindung wiederverwenden
const con = mysql.createConnection({
  host: process.env.DB_HOST || "localhost",
  user: process.env.DB_USER || "root",
  password: process.env.DB_PASSWORD || "",
  database: process.env.DB_DATABASE || "forum"
});

con.connect(function(err) {
  if (err) {
    console.error('Error connecting to the database:', err);
    process.exit(1); // Server herunterfahren, wenn die Verbindung fehlschlägt
  }
  console.log('Connected to the MySQL database.');
});

// Statische Dateien ausliefern
app.use(express.static(path.join(__dirname, 'public')));

// Test-Route
app.get('/test-connection', (req, res) => {
  res.send('Database connection is active.');
});

// Server starten
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server läuft auf Port ${PORT}`);
});


Erläuterungen:

- dotenv: Ein Modul zur Verwaltung von Umgebungsvariablen, das sensible Daten schützt und portabel macht.
- Einmalige MySQL-Verbindung: Die Verbindung erfolgt einmalig beim Start des Servers und nicht pro Anfrage.
- Fehlerbehandlung: Sorgt dafür, dass der Server stoppt, wenn die Datenbankverbindung fehlschlägt, um unsaubere Zustände zu verhindern.
- JSON-Middleware: Ermöglicht den Empfang von JSON-kodierten Anfragen.
- Umgebungsvariablen: Sensible Informationen sind nicht im Quellcode hardcodiert, sondern werden von einer Umgebungsvariablendatei (.env) bezogen.

Diese Struktur bietet mehr Sicherheit, bessere Trennung der Verantwortlichkeiten und verbesserte Wartbarkeit im Vergleich zur ursprünglichen Version.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community