[[: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)