Heim > Web-Frontend > js-Tutorial > Hauptteil

Organisieren einer produktionsbereiten Node.js- und Express.js-Anwendung

DDD
Freigeben: 2024-10-11 10:42:30
Original
212 Leute haben es durchsucht

Bei der Entwicklung einer produktionsbereiten Node.js- und Express.js-Anwendung ist die Aufrechterhaltung einer klaren und skalierbaren Ordnerstruktur von entscheidender Bedeutung. Nachfolgend finden Sie ein empfohlenes Verzeichnislayout unter einem src-Verzeichnis, das Ihre Anwendungskomponenten für eine bessere Lesbarkeit und Verwaltung organisiert.

Organizing a Production-Ready Node.js and Express.js Application

meine-App/
├── src/
│ ├── config/
│ │ ├── db.js # Datenbankverbindungskonfiguration
│ │ ├── appConfig.js # Anwendungsspezifische Konfigurationseinstellungen
│ │ └── jwtConfig.js # JWT-Geheimnis und Optionen für die Authentifizierung
│ ├── Controller/
│ │ ├── userController.js # Controller für benutzerbezogene Endpunkte
│ │ ├── productController.js # Controller für produktbezogene Endpunkte
│ │ └── authController.js # Controller für authentifizierungsbezogene Endpunkte
│ ├── Middleware/
│ │ ├── authMiddleware.js # Middleware zur Überprüfung von JWT-Tokens
│ │ ├── errorHandler.js # Zentralisierte Fehlerbehandlungs-Middleware
│ │ └── loggerMiddleware.js # Middleware für Protokollierungsanfragen
│ ├── Modelle/
│ │ ├── userModel.js # Benutzerdatenmodell (Schema)
│ │ └── productModel.js # Produktdatenmodell (Schema)
│ ├── Routen/
│ │ ├── userRoutes.js # Routen für benutzerbezogene Vorgänge
│ │ ├── productRoutes.js # Routen für produktbezogene Vorgänge
│ │ └── authRoutes.js # Routen zur Authentifizierung
│ ├── Dienstleistungen/
│ │ ├── userService.js # Geschäftslogik für benutzerbezogene Vorgänge
│ │ ├── productService.js # Geschäftslogik für produktbezogene Vorgänge
│ │ └── authService.js # Geschäftslogik für die Authentifizierung
│ ├── utils/
│ │ ├── logger.js # Logger-Dienstprogramm zum Protokollieren von Nachrichten
│ │ ├── dateFormatter.js # Dienstprogramm zum Formatieren von Datumsangaben
│ │ └── ResponseFormatter.js # Dienstprogramm für konsistente API-Antworten
│ ├── Tests/
│ │ ├── Controller/ # Unit-Tests für Controller
│ │ │ ├── userController.test.js
│ │ │ └── productController.test.js
│ │ ├── Dienste/ # Unit-Tests für Dienste
│ │ │ ├── userService.test.js
│ │ │ └── productService.test.js
│ │ └── Modelle/ # Unit-Tests für Modelle
│ │ ├── userModel.test.js
│ │ └── productModel.test.js
│ ├── .env # Umgebungsvariablen
│ ├── .gitignore # Dateien und Ordner, die in Git ignoriert werden sollen
│ ├── README.md # Projektdokumentation
│ ├── package.json # NPM-Paketmanifest
│ └── server.js # Haupteinstiegspunkt für die Anwendung
├── .env # Umgebungsvariablen
├── .gitignore # Dateien und Ordner, die in Git ignoriert werden sollen
├── README.md # Projektdokumentation
├── package.json # NPM-Paketmanifest
└── package-lock.json # Genaue Versionen von NPM-Abhängigkeiten

Detaillierte Aufschlüsselung jedes Ordners/jeder Datei

1. src/config/

db.js:Konfiguration für die Verbindung zur Datenbank (MongoDB, PostgreSQL usw.).
appConfig.js: Allgemeine Konfigurationseinstellungen für Ihre Anwendung, wie Server-Port oder Anwendungsname.
jwtConfig.js: Enthält den geheimen Schlüssel und Einstellungen im Zusammenhang mit JSON-Web-Tokens zur Authentifizierung.

2. src/controllers/

userController.js: Enthält Funktionen zur Bearbeitung benutzerbezogener HTTP-Anfragen (z. B. Registrierung, Abrufen von Benutzerdaten).
productController.js: Enthält Funktionen zur Verarbeitung produktbezogener HTTP-Anfragen.
authController.js: Verwaltet Authentifizierungsprozesse (Anmeldung, Abmeldung usw.).

3. src/middleware/

authMiddleware.js: Middleware zur Authentifizierung von Benutzern über JWT. Dadurch wird geprüft, ob eine Anfrage von einem authentifizierten Benutzer kommt.
errorHandler.js: Zentralisierte Fehlerbehandlungs-Middleware, die Fehler erfasst und eine formatierte Antwort sendet.
loggerMiddleware.js: Protokolliert eingehende Anfragen und andere wichtige Ereignisse zur Überwachung.

4. src/models/

userModel.js: Definiert das Schema und Modell für Benutzerdaten, normalerweise unter Verwendung von Mongoose für MongoDB.
productModel.js: Definiert das Schema und Modell für Produktdaten.

5. src/routes/

userRoutes.js: Enthält Routen im Zusammenhang mit Benutzervorgängen (z. B. Registrierung, Profilverwaltung).
productRoutes.js: Enthält Routen im Zusammenhang mit Produktvorgängen.
authRoutes.js: Enthält Routen speziell für die Authentifizierung.

6. src/services/

userService.js: Enthält Geschäftslogik im Zusammenhang mit Benutzervorgängen und trennt sie von Controllern.
productService.js: Enthält Geschäftslogik im Zusammenhang mit Produktvorgängen.
authService.js: Verwaltet die Authentifizierungslogik, einschließlich Token-Generierung und -Validierung.

7. src/utils/

logger.js: Dienstprogramm zum konsistenten Protokollieren von Nachrichten und Fehlern in der gesamten Anwendung.
dateFormatter.js: Eine Hilfsfunktion zum Formatieren von Datumsobjekten.
responseFormatter.js: Standardisiert API-Antworten für Konsistenz.

8. src/tests/

controllers/: Enthält Unit-Tests für jeden Controller, um sicherzustellen, dass er Anfragen korrekt verarbeitet.
services/: Enthält Unit-Tests für Servicefunktionen zur Überprüfung der Geschäftslogik.
models/: Enthält Tests für Modellvalidierungen und -funktionen.

9. Stammdateien

.env:Speichern Sie vertrauliche Informationen wie API-Schlüssel, Datenbankanmeldeinformationen und andere Umgebungsvariablen.
.gitignore: Geben Sie Dateien und Verzeichnisse an, die nicht von Git verfolgt werden sollen (z. B. node_modules, .env).
README.md: Dokumentation über das Projekt, wie man es einrichtet, Gebrauchsanweisungen und alle anderen relevanten Informationen.
package.json: Listet Projektabhängigkeiten, Skripte und Metadaten auf.
package-lock.json: Sperrt Abhängigkeitsversionen, um konsistente Installationen sicherzustellen.
server.js: Der Einstiegspunkt der Anwendung, an dem Sie den Express-Server und die Middleware initialisieren.

Beispielimplementierung von Schlüsseldateien

src/config/db.js

// src/config/db.js
`const mongoose = require('mongoose');
const config = require('./appConfig');

const connectDB = async () => {
versuche es mit {
Warten Sie auf mongoose.connect(config.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
console.log('MongoDB erfolgreich verbunden');
} Catch (Fehler) {
console.error('MongoDB-Verbindung fehlgeschlagen:', error.message);
process.exit(1);
}
};
module.exports = connectDB;`

src/middleware/authMiddleware.js

// src/middleware/authMiddleware.js
`const jwt = require('jsonwebtoken');
const config = require('../config/jwtConfig');

const authMiddleware = (req, res, next) => {
const token = req.headers['authorization'];
if (!token) {
return res.status(403).json({ message: 'Zugriff verweigert. Kein Token bereitgestellt.' });
}

Versuchen Sie es mit {
const decoded = jwt.verify(token, config.JWT_SECRET);
req.user = dekodiert;
next();
} Catch (Fehler) {
return res.status(401).json({ message: 'Invalid token.' });
}
};

module.exports = authMiddleware;`

src/server.js

// src/server.js
` const express = require('express');

const 몽구스 = require('몽구스');
const dotenv = require('dotenv');
const connectDB = require('./config/db');
const userRoutes = require('./routes/userRoutes');
const productRoutes = require('./routes/productRoutes');
const authRoutes = require('./routes/authRoutes');
const errorHandler = require('./middleware/errorHandler');
dotenv.config(); // .env 파일에서 환경 변수 로드
const 앱 = express();
const PORT = process.env.PORT || 3000;
// 데이터베이스에 연결
connectDB();
// 미들웨어
app.use(express.json()); // 들어오는 JSON 요청을 구문 분석합니다
// 경로
app.use('/api/users', userRoutes);
app.use('/api/products', productRoutes);
app.use('/api/auth', authRoutes);
// 오류 처리 미들웨어
app.use(errorHandler);
// 서버 시작
app.listen(PORT, () => {
console.log(서버는 http://localhost:${PORT}에서 실행 중입니다);
});`

결론

Src 디렉터리 아래에 Node.js 및 Express.js 애플리케이션을 구성하는 구조화된 접근 방식을 채택하면 유지 관리 및 확장이 용이하고 프로덕션에 바로 사용할 수 있는 프로젝트를 만들 수 있습니다. 이 조직은 우려 사항을 분리하고 명확성을 높여 애플리케이션이 성장함에 따라 더 나은 협업 및 개발 방식을 가능하게 합니다. 강력한 애플리케이션을 위해서는 단위 테스트, 오류 처리, 로깅 및 적절한 환경 관리를 구현해야 합니다.

Das obige ist der detaillierte Inhalt vonOrganisieren einer produktionsbereiten Node.js- und Express.js-Anwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!