V tomto článku máme obchod a jeho věci uložíme do databáze pro použití CRUD proces.
pokud potřebujete zdroj mého kódu, neváhejte se podívat na můj GitHub odkaz zde
Nejprve bychom měli nainstalovat balíček mongoose do aplikace s terminálem pomocí následujícího kódu:
npm install mongoose
Poté spustíme server přes express a vytvoříme soubor našeho modelu a zapíšeme příkazy, jak je uvedeno níže:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const productSchema = new Schema({
title: {
type: String,
required: true
},
price: {
type: Number,
required: true
},
description: {
type: String,
required: true
},
imageUrl: {
type: String,
required: true
}
});
module.exports = mongoose.model('Product',productSchema);
Poté do souboru ovladače zapíšeme kód mého CRUD krok po kroku. Stojí za zmínku, že pomocí template-engine EJS najdeme přístup do front-end sekce a vyměníme požadovaná data pro import a čtení URL.
Na začátku souboru ovladače požadujeme náš předdefinovaný model v Produktu aby bylo možné komunikovat s databází ve všech funkcích. Je třeba poznamenat, že velká písmena v proměnných, které obsahují modely, je mezi webovými vývojáři běžná, ale není povinná.
Vytvořit:
pro uložení dat do databáze bychom měli přijatá data nejprve uložit do proměnné. Dále definujeme proměnnou s názvem productData a pomocí new
importujeme přijatá data do našeho modelu (Produktu). Poté používáme Async/Await
slib, že napíšeme příkaz k uložení našich dat.
exports.postAddProduct = async (req, res, next) => {
const title = req.body.title;
const imageUrl = req.body.imageUrl;
const price = req.body.price;
const description = req.body.description;
const productData = new Product({
title: title,
price: price,
description: description,
imageUrl: imageUrl
});
try {
const result = await productData.save();
res.redirect("/admin/products");
} catch (err){
console.log(err);
}
};
Když ukládáme data do modelu, první proměnné jsou názvy našich polí, které vytvoříme v našem modelu v prvních krocích, a druhé proměnné jsou naše přijatá data, pokud mají obě proměnné stejný název, můžeme napsat název proměnné jen jednou, jak je uvedeno níže:
const productData = new Product({
title,
price,
description,
imageUrl
});
Přečtěte si:
Pro získání našich dat z databáze můžeme použít find
příkaz na proměnné modelu, jak je uvedeno níže:
exports.getAdminProducts = async (req, res, next) => {
try {
const products = await Product.find()
res.render("admin/products", {
pageTitle: "Admin Products",
products: products,
path: "/admin/products",
});
} catch (err) {
console.log(err);
}
};
Pro čtení specializovaného pole z naší databáze bychom mohli použít select()
příkaz k načtení našich dat. Stejně jako v příkladu níže jsme přečetli pouze název a cenu každého produktu:
Const products = await Product.find.select(‘title price’)
Aktualizace:
Abychom aktualizovali, nejprve, jako je vytváření, vložíme naše data do proměnných, poté pomocí ID, které jsme obdrželi, které označuje, který produkt chceme aktualizovat, vyhledáme v databázi a provedeme operaci aktualizace. K tomuto kroku používáme findByIdAndUpdate()
příkaz, do kterého na začátku zadáme moje přijaté ID, dále zapíšeme celá data k aktualizaci.
exports.postEditProduct = async (req, res, next) => {
const productId = req.body.productId;
const updatedTitle = req.body.title;
const updatedPrice = req.body.price;
const updatedImageUrl = req.body.imageUrl;
const updatedDesc = req.body.description;
try {
await Product.findByIdAndUpdate(productId, {
title: updatedTitle,
price: updatedPrice,
description: updatedDesc,
imageUrl: updatedImageUrl
});
res.redirect("/admin/products");
} catch (err) {
console.log(err)
}
};
Smazat:
V této sekci nejprve vložíme mé přijaté ID do productId a poté pomocí findByIdAnRemove()
příkaz najdeme a odstraníme produkt.
exports.postDeleteProduct = async (req, res, next) => {
const productId = req.body.productId;
try {
await Product.findByIdAndRemove(productId);
res.redirect("/admin/products");
} catch (err) {
console.log(err)
}
};
V tomto článku jsme se pokusili popsat CRUD provoz s NodeJS a MongoDB aniž bychom zacházeli do podrobností, jako je validace vstupních údajů.
Doufám, že tento článek byl pro vás užitečný a v případě jakýchkoli dotazů mě neváhejte kontaktovat.
S pozdravem,
Sasan Dehghanian