W tym artykule mamy sklep i zamierzamy zapisać jego rzeczy w bazie danych na użytek CRUD proces.
jeśli potrzebujesz źródła mojego kodu, możesz sprawdzić mój GitHub link tutaj
W pierwszej kolejności powinniśmy zainstalować pakiet mangusta w aplikacji wraz z terminalem za pomocą następującego kodu :
npm install mongoose
Następnie uruchamiamy serwer przez express i tworzymy plik naszego modelu i piszemy polecenia jak poniżej:
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);
Następnie, w pliku kontrolera, krok po kroku piszemy kod mojego CRUDa. Warto wspomnieć, że używając szablonu EJS znajdujemy dostęp do sekcji front-endu i wymieniamy wymagane dane do importu i odczytu przez URL.
Na początku pliku kontrolera wymagamy naszego wstępnie zdefiniowanego modelu w Produkcie zmienna umożliwiająca komunikację z bazą danych we wszystkich funkcjach. Należy zauważyć, że pisanie wielkimi literami w zmiennych zawierających modele jest powszechne wśród twórców stron internetowych, jednak nie jest obowiązkowe.
Utwórz:
w celu zapisania danych w bazie danych należy w pierwszej kolejności zapisać otrzymane dane w zmiennej. Następnie definiujemy zmienną o nazwie productData i używając new
polecenie importujemy otrzymane dane do naszego modelu (Produkt). Następnie używamy Async/Await
obiecuję napisać polecenie zapisu do przechowywania naszych danych.
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);
}
};
Gdy zapisujemy dane w modelu, pierwsze zmienne to nasze nazwy pól, które tworzymy w naszym modelu w pierwszych krokach, a drugie zmienne to nasze otrzymane dane jeśli obie zmienne mają taką samą nazwę, możemy po prostu wpisać nazwę zmiennej jeden raz, jak poniżej:
const productData = new Product({
title,
price,
description,
imageUrl
});
Czytaj:
Do pobrania naszych danych z bazy danych możemy użyć find
polecenie na zmiennej modelu jak poniżej:
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);
}
};
Do odczytania wyspecjalizowanego pola z naszej bazy danych możemy użyć select()
polecenie, aby pobrać nasze dane. Jak w poniższym przykładzie, przeczytaliśmy tylko nazwę i cenę każdego produktu:
Const products = await Product.find.select(‘title price’)
Aktualizacja:
W celu aktualizacji najpierw, podobnie jak przy tworzeniu, umieszczamy swoje dane w zmiennych, a następnie korzystając z otrzymanego ID, które wskazuje, który produkt chcemy zaktualizować, przeszukujemy bazę danych i wykonujemy operację aktualizacji. W tym kroku używamy findByIdAndUpdate()
polecenie, w którym na początku wpisujemy otrzymane ID, a następnie zapisujemy całe dane do aktualizacji.
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)
}
};
Usuń:
W tej sekcji najpierw umieściliśmy mój otrzymany identyfikator w productId zmienną, a następnie z findByIdAnRemove()
polecenie znajdujemy i usuwamy 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)
}
};
W tym artykule staraliśmy się opisać CRUD działanie z NodeJS i MongoDB bez wchodzenia w szczegóły, takie jak walidacja danych wejściowych.
Mam nadzieję, że ten artykuł był dla Ciebie pomocny, a jeśli masz jakiekolwiek pytania, nie wahaj się i skontaktuj się ze mną.
Z poważaniem,
Sasan Dehghanian