"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como estruturar seu código de back-end em Node.js (Express.js)

Como estruturar seu código de back-end em Node.js (Express.js)

Publicado em 2024-08-25
Navegar:941

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

Ao desenvolver um aplicativo Node.js usando Express.js, estruturar sua base de código de forma eficaz é crucial para manutenção, escalabilidade e facilidade de colaboração. Uma estrutura de projeto bem organizada permite gerenciar a complexidade, facilitando a navegação e a compreensão do código. Neste blog, exploraremos uma estrutura de pastas típica para um aplicativo Express.js e explicaremos a finalidade de cada diretório e arquivo.

Visão geral da estrutura do projeto
Aqui está uma estrutura de pastas comum para um aplicativo 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

Explicação de cada diretório e arquivo
aplicativo.js
O arquivo app.js é o ponto de entrada do seu aplicativo. É onde você inicializa o aplicativo Express, configura o middleware, define rotas e inicia o servidor. Pense nele como o centro de controle da sua aplicação 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;

lixo
O diretório bin normalmente contém scripts para iniciar seu servidor web. Esses scripts podem ser usados ​​para definir variáveis ​​de ambiente ou gerenciar diferentes ambientes (por exemplo, desenvolvimento, produção).

Exemplo: 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);
}

configuração
O diretório config contém arquivos de configuração para seu aplicativo, como conexões de banco de dados, configurações de servidor e variáveis ​​de ambiente.

Exemplo: config/index.js

module.exports = {
  port: process.env.PORT || 3000,
  db: {
    host: 'localhost',
    port: 27017,
    name: 'mydatabase'
  }
};

controladores
Os controladores contêm a lógica para lidar com solicitações recebidas e gerar respostas. Cada arquivo no diretório controllers normalmente corresponde a uma parte diferente do seu aplicativo (por exemplo, clientes, produtos).

Exemplo: controllers/customer.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 });
  }
};

middleware
As funções de middleware são usadas para processar solicitações antes que elas cheguem aos controladores. Eles podem lidar com tarefas como autenticação, registro e validação de solicitação.

Exemplo: 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' });
  }
};

modelos
Os modelos definem a estrutura dos seus dados e lidam com as interações com o banco de dados. Cada arquivo de modelo normalmente corresponde a uma entidade de dados diferente (por exemplo, Cliente, Produto).

Exemplo: modelos/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);

rotas
As rotas definem os caminhos para diferentes partes do seu aplicativo e os mapeiam para os controladores apropriados.

Exemplo: rotas/api.js

const express = require('express');
const router = express.Router();
const customerController = require('../controllers/customer');
router.get('/customers', customerController.getAllCustomers);
module.exports = router;

público
O diretório público contém arquivos estáticos como CSS, JavaScript e imagens que são servidos diretamente ao cliente.

Exemplo: estrutura de diretório

public/
├── css/
├── js/
├── images/

visualizações
Visualizações são modelos que renderizam o HTML para o cliente. Usando um mecanismo de modelagem como EJS, Pug ou Handlebars, você pode gerar HTML dinâmico.

Exemplo: visualizações/index.ejs



  My App

Welcome to My App

testes
O diretório de testes contém arquivos de teste para garantir que seu aplicativo funcione corretamente. Os testes são frequentemente organizados em testes de unidade, testes de integração e testes ponta a ponta (e2e).

Exemplo: estrutura de diretório

tests/
├── unit/
├── integration/
├── e2e/

utilitários
Funções utilitárias e módulos auxiliares são armazenados no diretório utils. Essas funções executam tarefas comuns como validação e formatação que são usadas em todo o aplicativo.

Exemplo: utils/validation.js

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

node_modules
O diretório node_modules contém todas as dependências que seu projeto precisa. Este diretório é gerenciado pelo npm (ou fio) e inclui pacotes instalados a partir do registro npm.

Conclusão
Um aplicativo Node.js bem estruturado usando Express.js melhora a capacidade de manutenção, escalabilidade e colaboração. Cada diretório e arquivo na estrutura serve a um propósito específico, desde o tratamento da configuração e definição de rotas até o gerenciamento de middleware e visualizações de renderização. Ao organizar sua base de código de maneira eficaz, você pode criar aplicativos robustos e escalonáveis ​​com facilidade.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/kafeel_ahmad/how-to-structure-your-backend-code-in-nodejs-expressjs-2e07?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3