Maison > interface Web > js tutoriel > Comment structurer votre code backend dans Node.js (Express.js)

Comment structurer votre code backend dans Node.js (Express.js)

WBOY
Libérer: 2024-08-16 06:25:02
original
813 Les gens l'ont consulté

How to Structure Your Backend Code in Node.js (Express.js)

Lors du développement d'une application Node.js à l'aide d'Express.js, la structuration efficace de votre base de code est cruciale pour la maintenabilité, l'évolutivité et la facilité de collaboration. Une structure de projet bien organisée vous permet de gérer la complexité, facilitant ainsi la navigation et la compréhension du code. Dans ce blog, nous explorerons une structure de dossiers typique pour une application Express.js et expliquerons le but de chaque répertoire et fichier.

Aperçu de la structure du projet
Voici une structure de dossiers courante pour une application Express.js :

?
├── ? app.js
├── ? bin
├── ? config
├── ? controllers
│   ├── ? customer.js
│   ├── ? product.js
│   └── ...
├── ? middleware
│   ├── ? auth.js
│   ├── ? logger.js
│   └── ...
├── ? models
│   ├── ? customer.js
│   ├── ? product.js
│   └── ...
├── ? routes
│   ├── ? api.js
│   ├── ? auth.js
│   └── ...
├── ? public
│   ├── ? css
│   ├── ? js
│   ├── ? images
│   └── ...
├── ? views
│   ├── ? index.ejs
│   ├── ? product.ejs
│   └── ...
├── ? tests
│   ├── ? unit
│   ├── ? integration
│   ├── ? e2e
│   └── ...
├── ? utils
│   ├── ? validation.js
│   ├── ? helpers.js
│   └── ...
└── ? node_modules
Copier après la connexion

Explication de chaque répertoire et fichier
app.js
Le fichier app.js est le point d'entrée de votre application. C'est là que vous initialisez l'application Express, configurez le middleware, définissez les itinéraires et démarrez le serveur. Considérez-le comme le centre de contrôle de votre application Web.

const express = require('express');
const app = express();
const config = require('./config');
const routes = require('./routes');
// Middleware setup
app.use(express.json());
// Routes setup
app.use('/api', routes);
// Start server
const PORT = config.port || 3000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});
module.exports = app;
Copier après la connexion

poubelle
Le répertoire bin contient généralement des scripts pour démarrer votre serveur Web. Ces scripts peuvent être utilisés pour définir des variables d'environnement ou gérer différents environnements (par exemple, développement, production).

Exemple : bin/www

#!/usr/bin/env node
const app = require('../app');
const debug = require('debug')('your-app:server');
const http = require('http');
const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
const server = http.createServer(app);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
function normalizePort(val) {
  const port = parseInt(val, 10);
  if (isNaN(port)) return val;
  if (port >= 0) return port;
  return false;
}
function onError(error) {
  if (error.syscall !== 'listen') throw error;
  const bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}
function onListening() {
  const addr = server.address();
  const bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
  debug('Listening on ' + bind);
}
Copier après la connexion

config
Le répertoire de configuration contient les fichiers de configuration de votre application, tels que les connexions à la base de données, les paramètres du serveur et les variables d'environnement.

Exemple : config/index.js

module.exports = {
  port: process.env.PORT || 3000,
  db: {
    host: 'localhost',
    port: 27017,
    name: 'mydatabase'
  }
};
Copier après la connexion

contrôleurs
Les contrôleurs contiennent la logique permettant de gérer les demandes entrantes et de générer des réponses. Chaque fichier du répertoire des contrôleurs correspond généralement à une partie différente de votre application (par exemple, clients, produits).

Exemple : contrôleurs/client.js

const Customer = require('../models/customer');
exports.getAllCustomers = async (req, res) => {
  try {
    const customers = await Customer.find();
    res.json(customers);
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
};
Copier après la connexion

intergiciel
Les fonctions middleware sont utilisées pour traiter les requêtes avant qu’elles n’atteignent les contrôleurs. Ils peuvent gérer des tâches telles que l'authentification, la journalisation et la validation des demandes.

Exemple : middleware/auth.js

module.exports = (req, res, next) => {
  const token = req.header('Authorization');
  if (!token) return res.status(401).json({ message: 'Access Denied' });
  try {
    const verified = jwt.verify(token, process.env.JWT_SECRET);
    req.user = verified;
    next();
  } catch (err) {
    res.status(400).json({ message: 'Invalid Token' });
  }
};
Copier après la connexion

modèles
Les modèles définissent la structure de vos données et gèrent les interactions avec la base de données. Chaque fichier de modèle correspond généralement à une entité de données différente (par exemple, Client, Produit).

Exemple : models/customer.js

const mongoose = require('mongoose');
const customerSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true,
    unique: true
  },
  createdAt: {
    type: Date,
    default: Date.now
  }
});
module.exports = mongoose.model('Customer', customerSchema);
Copier après la connexion

itinéraires
Les routes définissent les chemins vers différentes parties de votre application et les mappent aux contrôleurs appropriés.

Exemple : routes/api.js

const express = require('express');
const router = express.Router();
const customerController = require('../controllers/customer');
router.get('/customers', customerController.getAllCustomers);
module.exports = router;
Copier après la connexion

publique
Le répertoire public contient des fichiers statiques tels que CSS, JavaScript et des images qui sont servies directement au client.

Exemple : Structure des répertoires

public/
├── css/
├── js/
├── images/
Copier après la connexion

vues
Les vues sont des modèles qui restituent le code HTML pour le client. À l'aide d'un moteur de création de modèles comme EJS, Pug ou guidon, vous pouvez générer du HTML dynamique.

Exemple : vues/index.ejs

<!DOCTYPE html>
<html>
<head>
  <title>My App</title>
  <link rel="stylesheet" href="/css/styles.css">
</head>
<body>
  <h1>Welcome to My App</h1>
  <div id="content">
    <%- content %>
  </div>
</body>
</html>
Copier après la connexion

essais
Le répertoire tests contient des fichiers de test pour garantir le bon fonctionnement de votre application. Les tests sont souvent organisés en tests unitaires, tests d'intégration et tests de bout en bout (e2e).

Exemple : Structure des répertoires

tests/
├── unit/
├── integration/
├── e2e/
Copier après la connexion

utils
Les fonctions utilitaires et les modules d'assistance sont stockés dans le répertoire utils. Ces fonctions effectuent des tâches courantes telles que la validation et le formatage qui sont utilisées dans toute l'application.

Exemple : utils/validation.js

exports.isEmailValid = (email) => {
  const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return re.test(String(email).toLowerCase());
};
Copier après la connexion

node_modules
Le répertoire node_modules contient toutes les dépendances dont votre projet a besoin. Ce répertoire est géré par npm (ou fil) et comprend les packages installés à partir du registre npm.

Conclusion
Une application Node.js bien structurée utilisant Express.js améliore la maintenabilité, l'évolutivité et la collaboration. Chaque répertoire et fichier de la structure répond à un objectif spécifique, depuis la gestion de la configuration et la définition des itinéraires jusqu'à la gestion du middleware et du rendu des vues. En organisant efficacement votre base de code, vous pouvez facilement créer des applications robustes et évolutives.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal