Продолжим работу с проектом из прошлой темы и в качестве базы данных вместо массива используем базу данных MongoDB. Для взаимодействия с MongoDB будем использовать Mongoose.
Итак, вначале добавим mongoose в проект:
npm install mongoose --save
Проект в прошлой теме выглядел следующим образом:
Теперь нам надо добавить в него связь с 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 и добавим одного пользователя:
И после успешного добавления данные попадут в бд, и нас переадресуют на страницу, где мы увидим все ранее добавленные данные: