Esimene asi, mida teeme, on registreerumine MongoDB Atlasesse. https://cloud.mongodb.com/
Laadime alla raamatukogud muutujate keskkonna jaoks ja MongoDB andmebaasiga ühenduse jaoks.
npm install dotenv
npm install mongooseLoome projekti juurkataloogis faili .env ja kirjutame sinna MongoDB-ga ühenduse loomise rea.
Loome mudeli kollektsioonile Hero. Esmalt peame looma kausta „models“ ja sinna faili „hero.js“
const mongoose = require('mongoose');
const heroSchema = new mongoose.Schema({
id: {
type: Number,
required: true,
unique: true
},
name: {
type: String,
required: true
},
attribute: {
type: String,
required: true,
enum: ['Strength', 'Agility', 'Intelligence', 'Universal']
}
});
module.exports = mongoose.model('Hero', heroSchema);
Edasi kuulutame oma Mongoose’i peamises serverifailis
require('dotenv').config();
const uri = process.env.MONGO_URI;
const mongoose = require("mongoose");
const Hero = require('./models/hero');
mongoose.connect(uri)
.then(() => console.log('Connected to MongoDB Atlas'))
.catch(err => console.error('MongoDB connection error:', err));
Ja pärast kõike seda uuendame ja läheme üle kohalikult andmetega töötamiselt MongoDB andmebaasiga töötamisele, peame uuendama iga end-pointi ja kohandama selle töötamise Mongoose (MongoDB) jaoks.
app.get("/heroes", async (req, res) => {
try {
const heroes = await Hero.find();
res.json(heroes);
} catch (err) {
res.status(500).json({ message: err.message });
}
});
app.get("/heroes/:id", async (req, res) => {
try {
const hero = await Hero.findOne({ id: parseInt(req.params.id) });
if (!hero) return res.status(404).json({ message: "Hero not found" });
res.json(hero);
} catch (err) {
res.status(500).json({ message: err.message });
}
});
app.post("/heroes", async (req, res) => {
try {
const lastHero = await Hero.findOne().sort({ id: -1 });
const newId = lastHero ? lastHero.id + 1 : 1;
if (!req.body.name || !req.body.attribute) {
return res.status(400).json({ message: "Name and attribute are required" });
}
if (!attributes.includes(req.body.attribute)) {
return res.status(400).json({ message: "Invalid attribute" });
}
const existingHero = await Hero.findOne({ name: req.body.name });
if (existingHero) return res.status(409).json({ message: "Hero already exists" });
const hero = new Hero({
id: newId,
name: req.body.name,
attribute: req.body.attribute
});
const newHero = await hero.save();
res.status(201).json(newHero);
} catch (err) {
res.status(500).json({ message: err.message });
}
});
app.delete("/heroes/:id", async (req, res) => {
try {
const hero = await Hero.findOne({ id: parseInt(req.params.id) });
if (!hero) return res.status(404).json({ message: "Hero not found" });
if (hero.name === "Shadow Fiend") return res.status(409).json({ message: "You cannot delete this hero" });
await hero.remove();
res.status(204).send();
} catch (err) {
res.status(500).json({ message: err.message });
}
});lisame kaasaegselt uue end-pointi andmete uuendamiseks
app.put("/heroes/:id", async (req, res) => {
try {
const hero = await Hero.findOne({ id: parseInt(req.params.id) });
if (!hero) return res.status(404).json({ message: "Hero not found" });
if (req.body.name) hero.name = req.body.name;
if (req.body.attribute) {
if (!attributes.includes(req.body.attribute)) {
return res.status(400).json({ message: "Invalid attribute" });
}
hero.attribute = req.body.attribute;
}
const updatedHero = await hero.save();
res.json(updatedHero);
} catch (err) {
res.status(500).json({ message: err.message });
}
});Praegu näeb projekti juurkataloog välja järgmine

Kokkuvõtte
Selle asemel, et töötada kohalike ja meie puhul staatiliste andmetega, võib kasutada andmebaasi, mis asub tegelikel serveritel.