1
resposta

Como o get livros 'sabia' quais dados retornar?

No arquivo dbConnect.js é feita a conexão com o banco criado no Mongo. No arquivo Livro.js, é criado um modelo através do mongoose.model, mas nesse arquivo a conexão feita anteriormente não é utilizada/importada.

No arquivo app.js, tanto a conexão quanto o modelo são importados (import db from "./config/dbConnect.js"; *e *import livros from "./models/Livro.js"

Porém, na requisição do .get('/livros') o método utilizado é um método do modelo importado (livros.find()). Em que momento é definido que livros.find vai buscar naquele banco específico, sendo que a constante utilizada na importação do banco (db) não é utilizada no código da rota?

Ps: no exemplo abaixo, se eu comentar as linhas do db.on e db.once, o funcionamento do get se mantém. Porém, se eu comentar a importação da conexão, a requisição não funciona

import express from "express";
import db from "./config/dbConnect.js";
import livros from "./models/Livro.js"

db.on("error", console.log.bind(console, 'Erro de conexão'))

db.once("open", ()=>{
    console.log('Conexão com o banco feita com sucesso')
})

const app = express();

app.use(express.json());

// const livros = [
//     {
//         "id": 1,
//         "titulo": "Senhor dos aneis"
//     },
//     {
//         "id": 2,
//         "titulo": "O hobbit"
//     }
// ]

app.get('/', (req, res)=>{
    res.status(200).send('Curso de Node');
})

app.get('/livros/:id', (req, res)=>{
    let index = getById(req.params.id);
    res.status(200).json(livros[index])

})


app.get('/livros', (req, res)=>{
    livros.find((err, livros) =>{
        res.status(200).json(livros);
    })
})
1 resposta

Olá, Pedro! Tudo certo?

O db.on e db.once são listeners , de forma simples, são elementos que ficam ouvindo a aplicação para quando um evento é disparado, eles fazem algo, o on toda vez que ocorrer e o once apenas uma vez. Um exemplo usado no projeto é esse:

db.once("open", ()=> {
console.log("Connect to MongoDB");
});

No exemplo acima, quando a conexão é aberta (open) nós exibimos uma mensagem. Perceba que esse listener responde quando temos uma conexão, mas ele não é o responsável pela conexão!

Conforme a própria documentação do mongoose, o mínimo que precisamos para estabelecer uma conexão com um banco de dados é usar o mongoose.connect.

A configuração da conexão é feita no arquivo dbConnect.js e a partir do momento que importamos no arquivo app.js, ela já é executada.

Caso tenha ficado com alguma dúvida, não deixe de compartilhar!

Continue praticando e evoluindo na sua jornada.

Bons estudos e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!