[[:oktatas:web:back-end_framework:express|< Express]] ====== Express - MongoDB adatbázis ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2023 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Szerver ===== ==== Windows Chocolatey ==== choco install mongodb A szerver automatikusan elindul. Ellenőrzés: sc query sc query | more sc query mongodb ==== Linuxon ==== Végezzük el az előkészületeket a weboldal szerint: * https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-debian/ apt install mongodb-org systemctl status mondgod ===== Kliens ===== Linuxon: mongo ===== Docker ===== Töltsük le a képfájlt: docker pull mongodb/mongodb-community-server Indítsunk belőle konténert: docker run --name mongo -d mongodb/mongodb-community-server:latest Futó konténerek kezelése: docker container ls Kapcsolódás a szerverhez: docker exec -it mongo mongosh ===== Függőségek ===== A Mongoose egy dokumentum leképező rendszer, egy ODM azaz Object-Document Mapping. pnpm install mongoose ===== Dolgozók adatbázisban ===== const mongoose = require('mongoose'); const conString = 'mongodb://127.0.0.1:27017/emp'; mongoose.connect(conString); const employeeSchema = new mongoose.Schema({ name: { type: String, required: true }, city: { type: String, required: true }, salary: { type: Number, required: true } }); const Employee = mongoose.model('Employee', employeeSchema); module.exports = { Employee }; const { Employee } = require('../models/database'); //... async store(req, res) { console.log(req.body); if(!req.body.name) { res.status(400); res.json({ success: false, message: 'Bad request' }); } const newEmployee = new Employee(req.body); const insertedEmployee = await newEmployee.save(); res.status(201) res.json({ success: true, message: insertedEmployee }); }, A newEmployee.save() utasítást muszáj await előtaggal, mert másként nem kapjuk meg a beszúrt adatokat. ==== Ellenőrzés ==== Küldjünk egy HTTP klienssel egy felhasználót: http post localhost:8000/api/employees name='aaaa' city='Szeged' salary=357 Indítsuk el a MongoDB Shell-t: mongo Megnézhetjük a létező adatbázisokat: > show dbs Kapcsolódjunk az emp adatbázishoz: > use emp Nézzük meg milyen kollekcióink vannak: > show collections A modellek kollekciókra képződnek le. > db.employee.find() A kimenet ehhez hasonló kell legyen: { "_id" : ObjectId("647ca006579fd6808558cfa7"), "name" : "aaaa", "city" : "Szeged", "salary" : 357, "__v" : 0 } ==== Dolgozók lekérdezése ==== async index(req, res) { const allEmployees = await Employee.find(); res.json({ success: true, data: allEmployees, message: 'Ok' }); }, ==== Dolgozó törlése ==== async delete(req, res) { if(!req.params.id) { res.status(400); res.json({ success: false, message: 'Bad request' }); } const id = req.params.id; const deletedEmployee = await Employee.findByIdAndDelete(id); res.status(200); res.json({ success: true, data: deletedEmployee, message: 'Ok' }); }, ==== Dolgozó módosítása ==== async update(req, res) { if(!req.params.id || !req.body.name) { res.status(400); res.json({ success: false, message: 'Bad request' }); } const _id = req.params.id; await Employee.updateOne({ _id }, req.body); const updatedEmployee = await Employee.findById(_id); res.status(200); res.json({ success: true, body: updatedEmployee, message: 'Ok' }); } ===== Felhasználó ===== const mongoose = require('mongoose'); const conString = 'mongodb://127.0.0.1:27017/emp'; mongoose.connect(conString); const employeeSchema = new mongoose.Schema({ name: { type: String, required: true }, city: { type: String, required: true }, salary: { type: Number, required: true } }); const userSchema = new mongoose.Schema({ username: { type: String, required: true }, email: { type: String, required: true }, password: { type: String, required: true }, }); const Employee = mongoose.model('Employee', employeeSchema); const User = mongoose.model('User', userSchema); module.exports = { Employee, User }; ===== Linkek ===== * https://dev.to/franciscomendes10866/setup-mongodb-with-mongoose-and-express-4c58 (2023) * https://rahmanfadhil.com/express-rest-api/ (2023)