< Express

Express - MongoDB adatbázis

Szerző: Sallai András

Copyright © Sallai András, 2023

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