Связь с базой данных MongoDB

Последнее обновление: 19.11.2022

Продолжим работу с проектом из прошлой темы и в качестве базы данных вместо массива используем базу данных MongoDB. Для взаимодействия с MongoDB будем использовать Mongoose.

Итак, вначале добавим mongoose в проект:

npm install mongoose --save

Проект в прошлой теме выглядел следующим образом:

MVC в Express и Node.js

Теперь нам надо добавить в него связь с mongodb. Вначале изменим в папке models файл user.js, где хранится определение используемой модели:

const mongoose = require("mongoose");

const Schema = mongoose.Schema;
// установка схемы
const userScheme = new Schema({
    name: String,
    age: Number
});
module.exports = mongoose.model("User", userScheme);

Теперь модель User представляет модель mongoose, которая определяется с помощью схемы userSheme. Поскольку модель mongoose уже автоматически имеет ряд методов для взаимодействия с базой данных, соответственно нам не надо прописывать специальные методы для добавления или получения данных, как в прошлой теме.

Далее в папке controllers изменим файл 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");
};

В методе getUsers() вызывается метод User.find(), который получает данные из базы данных и передает их в представление users.hbs.

В методе postUser() из полученных данных создается объект User, и у него вызывается метод save(), который сохраняет объект в бд.

Файл userRouter.js из папки routes, который связывает маршруты и контроллер userController, остается тем же самым:

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;

И в конце изменим главный файл приложения 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("Сервер ожидает подключения...");
    }
    catch(err) {
        return console.log(err);
    }
}
main(); // запускаем приложение

// прослушиваем прерывание работы программы (ctrl-c)
process.on("SIGINT", async() => {
     
    await mongoose.disconnect();
    console.log("Приложение завершило работу");
    process.exit();
});

Теперь сервер начинает принимать запросы после установки подключения с базой данных MondoDB.

Все остальные файлы остаются без изменений.

Запустим приложение, обратимся по адресу http://localhost:3000/users/create и добавим одного пользователя:

MongoDB в MVC в Node.js

И после успешного добавления данные попадут в бд, и нас переадресуют на страницу, где мы увидим все ранее добавленные данные:

Mongoose в MVC в Node.js
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850