Atualizado: 02/01/2025

Conectando-se ao Banco de Dados MongoDB - Node.js

Vamos continuar trabalhando no projeto do último tema e, em vez de usar um array como banco de dados, utilizaremos o MongoDB. Para interagir com o MongoDB, utilizaremos o Mongoose.

Primeiramente, vamos adicionar o mongoose ao projeto:

npm install mongoose --save

No tema anterior, projeto estava organizado da seguinte forma:

MVCAPP/
├── controllers/
│   ├── homeController.js
│   └── userController.js
├── routes/
│   ├── homeRouter.js
│   └── userRouter.js
├── app.js
├── package.json
└── node_modules/

Agora, precisamos adicionar a conexão com o MongoDB. Primeiro, vamos modificar o arquivo user.js na pasta models, onde está definido o modelo que será utilizado:

const mongoose = require("mongoose");

const Schema = mongoose.Schema;
// Definindo o esquema
const userSchema = new Schema({
    name: String,
    age: Number
});
module.exports = mongoose.model("User", userSchema);

Agora, o modelo User representa um modelo do Mongoose, que é definido por meio do esquema userSchema. Como o modelo do Mongoose já possui diversos métodos para interagir com o banco de dados, não precisamos escrever métodos específicos para adicionar ou obter dados, como foi feito no tema anterior.

Em seguida, na pasta controllers, vamos modificar o arquivo userController.js:

const User = require("../models/user.js");

exports.addUser = function (request, response) {
    response.render("create.hbs");
};

exports.getUsers = async function (request, response) {
    const allUsers = await User.find({});
    response.render("users.hbs", { users: allUsers });
};

exports.postUser = async function (request, response) {
    if (!request.body) return response.sendStatus(400);
    const userName = request.body.name;
    const userAge = request.body.age;
    const user = new User({ name: userName, age: userAge });
    
    await user.save();
    response.redirect("/users");
};

No método getUsers(), o método User.find() é chamado para obter dados do banco de dados e enviá-los para a visualização users.hbs.

No método postUser(), um objeto User é criado com os dados recebidos, e o método save() é chamado para salvar o objeto no banco de dados.

O arquivo userRouter.js na pasta routes, que vincula as rotas ao controlador userController, permanece o mesmo:

const express = require("express");
const userController = require("../controllers/userController.js");
const userRouter = express.Router();

userRouter.use("/postuser", userController.postUser);
userRouter.use("/create", userController.addUser);
userRouter.use("/", userController.getUsers);

module.exports = userRouter;

Por fim, vamos modificar o arquivo principal da aplicação, app.js:

const express = require("express");
const mongoose = require("mongoose");
const app = express();
const userRouter = require("./routes/userRouter.js");
const homeRouter = require("./routes/homeRouter.js");

app.set("view engine", "hbs");
app.use(express.urlencoded({ extended: false }));

app.use("/users", userRouter);
app.use("/", homeRouter);

app.use(function (req, res) {
    res.status(404).send("Not Found");
});

async function main() {
    try {
        await mongoose.connect("mongodb://127.0.0.1:27017/usersdb");
        app.listen(3000);
        console.log("Servidor aguardando conexões...");
    } catch (err) {
        return console.log(err);
    }
}
main(); // Inicia a aplicação

// Lida com a interrupção do programa (ctrl-c)
process.on("SIGINT", async () => {
    await mongoose.disconnect();
    console.log("Aplicação encerrada");
    process.exit();
});

Agora, o servidor começa a aceitar requisições após a conexão com o banco de dados MongoDB ser estabelecida.

Todos os outros arquivos permanecem inalterados.

Vamos executar a aplicação, acessar o endereço http://localhost:3000/users/create e adicionar um usuário:

MongoDB em MVC com Node.js

Após a adição bem-sucedida, os dados serão salvos no banco de dados, e você será redirecionado para uma página onde poderá ver todos os dados adicionados anteriormente.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com