В тази статия имаме магазин и ще запазим неговите неща в базата данни за използване на CRUD процес.
ако имате нужда от източника на моя код, не се колебайте да проверите моя GitHub връзка тук
Първо, трябва да инсталираме пакета mongoose в приложението с терминала, като използваме следния код:
npm install mongoose
След това стартираме сървъра чрез express и създаваме файла на нашия модел и пишем командите, както следва:
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);
След това във файла на контролера записваме поетапно кода на моя CRUD. Струва си да се спомене, че с помощта на template-engine EJS намираме достъп до предния край и обменяме необходимите данни за импортиране и четене чрез URL.
В началото на файла на контролера изискваме нашия предварително дефиниран модел в Продукта променлива, за да може да комуникира с базата данни във всички функции. Трябва да се отбележи, че изписването с главни букви в променливи, които съдържат модели, е често срещано явление сред уеб разработчиците, но не е задължително.
Създаване:
за запазване на данни в базата данни, първо трябва да запишем получените данни в променливата. След това дефинираме променлива с име productData и с помощта на new
команда импортираме получените данни в нашия модел (Продукт). След това използваме Async/Await
обещавам да напишем команда за запазване за съхраняване на нашите данни.
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);
}
};
Когато запазваме данни в модела, първите променливи са имената на нашите полета, които създаваме в нашия модел в първите стъпки, а вторите променливи са нашите получени данни, ако и двете променливи имат едно и също име, можем да напишем името на променливата просто един път както по-долу:
const productData = new Product({
title,
price,
description,
imageUrl
});
Прочетете:
За извличане на нашите данни от базата данни бихме могли да използваме find
команда върху променливата на модела, както следва:
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);
}
};
За четене на специализирано поле от нашата база данни можем да използваме select()
команда за извличане на нашите данни. Както в примера по-долу, ние прочетохме само името и цената на всеки продукт:
Const products = await Product.find.select(‘title price’)
Актуализация:
За да актуализираме, първо, подобно на създаване, поставяме нашите данни в променливите, след което използвайки идентификатора, който получихме, който показва кой продукт искаме да актуализираме, търсим в базата данни и извършваме операцията за актуализиране. За тази стъпка използваме findByIdAndUpdate()
команда, в която в началото въвеждаме получения ми идентификатор, след това записваме всички данни за актуализиране.
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)
}
};
Изтриване:
В този раздел първо поставяме получения идентификатор в productId променлива, след това с findByIdAnRemove()
команда намираме и премахваме продукта.
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)
}
};
В тази статия се опитахме да опишем CRUD работа с NodeJS и MongoDB без да навлизаме в подробности, като например валидирането на входните данни.
Надявам се тази статия да ви е била полезна и в случай, че имате въпроси, не се колебайте и се свържете с мен.
На Ваше разположение,
Сасан Дехганян