Heim >Web-Frontend >js-Tutorial >Organisieren einer produktionsbereiten Node.js- und Express.js-Anwendung
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.
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!