# alura-cursos/api-node-express-2 architecture

> Architecture diagram of the GitHub repository alura-cursos/api-node-express-2, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/alura-cursos/api-node-express-2
- Repository: https://github.com/alura-cursos/api-node-express-2

## Overview

This is a small Express API for managing books and authors. Clients send HTTP requests through the server and registered routes; controllers perform the requested catalog operations through Mongoose models, which use the configured MongoDB connection. Books can be searched by publisher and include populated author data. The README identifies the project as course material but documents no further capabilities; the graph follows the sampled source.

Main entry points: [`src/app.js`](https://github.com/alura-cursos/api-node-express-2/blob/main/src/app.js) (Express app), [`src/routes/index.js`](https://github.com/alura-cursos/api-node-express-2/blob/main/src/routes/index.js) (Route registry), [`src/controllers/livrosController.js`](https://github.com/alura-cursos/api-node-express-2/blob/main/src/controllers/livrosController.js) (Book controller), [`src/controllers/autoresController.js`](https://github.com/alura-cursos/api-node-express-2/blob/main/src/controllers/autoresController.js) (Author controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["HTTP runtime"]
  node_server["HTTP server<br/>[server.js]"]
  node_app["Express app<br/>[app.js]"]
  node_route_index["Route registry<br/>[index.js]"]
end

subgraph group_catalog["Catalog API"]
  node_book_routes["Book routes<br/>[livrosRoutes.js]"]
  node_author_routes["Author routes<br/>[autoresRoutes.js]"]
  node_book_controller["Book controller"]
  node_author_controller["Author controller"]
end

subgraph group_persistence["Persistence"]
  node_book_model["Book model<br/>[Livro.js]"]
  node_author_model["Author model<br/>[Autor.js]"]
  node_db_config["Mongo connection<br/>[dbConnect.js]"]
end

node_client(("API client"))
node_mongodb[("MongoDB")]

node_server -->|"starts"| node_app
node_client -->|"sends HTTP"| node_server
node_app -->|"registers routes"| node_route_index
node_app -->|"monitors connection"| node_db_config
node_route_index -->|"mounts"| node_book_routes
node_route_index -->|"mounts"| node_author_routes
node_book_routes -->|"dispatches"| node_book_controller
node_author_routes -->|"dispatches"| node_author_controller
node_book_controller -->|"queries and writes"| node_book_model
node_author_controller -->|"queries and writes"| node_author_model
node_book_model -->|"populates author"| node_author_model
node_db_config -->|"connects"| node_mongodb
node_book_controller -->|"sends response"| node_client
node_author_controller -->|"sends response"| node_client

click node_server "https://github.com/alura-cursos/api-node-express-2/blob/main/server.js"
click node_app "https://github.com/alura-cursos/api-node-express-2/blob/main/src/app.js"
click node_route_index "https://github.com/alura-cursos/api-node-express-2/blob/main/src/routes/index.js"
click node_book_routes "https://github.com/alura-cursos/api-node-express-2/blob/main/src/routes/livrosRoutes.js"
click node_author_routes "https://github.com/alura-cursos/api-node-express-2/blob/main/src/routes/autoresRoutes.js"
click node_book_controller "https://github.com/alura-cursos/api-node-express-2/blob/main/src/controllers/livrosController.js"
click node_author_controller "https://github.com/alura-cursos/api-node-express-2/blob/main/src/controllers/autoresController.js"
click node_book_model "https://github.com/alura-cursos/api-node-express-2/blob/main/src/models/Livro.js"
click node_author_model "https://github.com/alura-cursos/api-node-express-2/blob/main/src/models/Autor.js"
click node_db_config "https://github.com/alura-cursos/api-node-express-2/blob/main/src/config/dbConnect.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_server,node_app,node_route_index,node_client toneBlue
class node_book_routes,node_author_routes,node_book_controller,node_author_controller,node_mongodb toneAmber
class node_book_model,node_author_model,node_db_config toneMint
```

## Components

### HTTP runtime

- [HTTP server](https://github.com/alura-cursos/api-node-express-2/blob/main/server.js): `server.js`
- [Express app](https://github.com/alura-cursos/api-node-express-2/blob/main/src/app.js): `src/app.js`
- [Route registry](https://github.com/alura-cursos/api-node-express-2/blob/main/src/routes/index.js): `src/routes/index.js`

### Catalog API

- [Book routes](https://github.com/alura-cursos/api-node-express-2/blob/main/src/routes/livrosRoutes.js): `src/routes/livrosRoutes.js`
- [Author routes](https://github.com/alura-cursos/api-node-express-2/blob/main/src/routes/autoresRoutes.js): `src/routes/autoresRoutes.js`
- [Book controller](https://github.com/alura-cursos/api-node-express-2/blob/main/src/controllers/livrosController.js): `src/controllers/livrosController.js`
- [Author controller](https://github.com/alura-cursos/api-node-express-2/blob/main/src/controllers/autoresController.js): `src/controllers/autoresController.js`

### Persistence

- [Book model](https://github.com/alura-cursos/api-node-express-2/blob/main/src/models/Livro.js): `src/models/Livro.js`
- [Author model](https://github.com/alura-cursos/api-node-express-2/blob/main/src/models/Autor.js): `src/models/Autor.js`
- [Mongo connection](https://github.com/alura-cursos/api-node-express-2/blob/main/src/config/dbConnect.js): `src/config/dbConnect.js`

### Other components

- **API client**
- **MongoDB**

## Connections

- HTTP server → Express app: starts
- API client → HTTP server: sends HTTP
- Express app → Route registry: registers routes
- Express app → Mongo connection: monitors connection
- Route registry → Book routes: mounts
- Route registry → Author routes: mounts
- Book routes → Book controller: dispatches
- Author routes → Author controller: dispatches
- Book controller → Book model: queries and writes
- Author controller → Author model: queries and writes
- Book model → Author model: populates author
- Mongo connection → MongoDB: connects
- Book controller → API client: sends response
- Author controller → API client: sends response
