Привет, приятно видеть вас здесь, в этой 5-й статье этого трека. Я надеюсь, что это путешествие станет для вас испытанием, как и для меня. В этой статье мы реализуем все маршруты микросервиса продукта. Давайте начнем.

Прежде чем мы начнем, взгляните на последнюю статью трека.
Первый маршрут, который мы собираемся создать, это GET ALL; этот маршрут будет извлекать все данные из продукта. Единственное, что вы должны иметь в виду, это вызывать функцию «следующий», когда она обнаруживает ошибку; важно для Express Framework. Ниже скриншот.

Чтобы протестировать конечную точку, вы должны сначала запустить все переменные среды ниже. После этого вы запускаете Node-сервер «npm run dev», открываете Client Postman и вводите http://localhost:3000/product.
Переменные среды
· УСТАНОВИТЬ NODE_ENV=развитие
· УСТАНОВИТЬ ПОРТ=3000
· УСТАНОВИТЬ MONGODB_URL=локальный хост
· УСТАНОВИТЬ MONGODB_PORT=27017
· УСТАНОВИТЬ MONGODB_DATABASE=admin
· УСТАНОВИТЬ MONGODB_USERNAME=имя_usr
· УСТАНОВИТЬ MONGODB_PASSWORD=pr_123

Клиент Postman https://www.getpostman.com/downloads/

Следующим является POST, то есть сохранение новых данных.

Чтобы протестировать его через Postman, вы должны изменить метод на POST и добавить содержимое в тело запроса. Обратите внимание на выделенные элементы.

Теперь давайте создадим маршруты, использующие ID для GET, PUT или DELETE. Из-за этого мы будем фильтровать ранее по идентификатору, если мы найдем продукт, давайте двигаться вперед, если не показать ошибку 404. Смотрите изображение.

Сейчас тестирую через Postman. Мы должны использовать метод GET и использовать число в пути URL, попытаться использовать несуществующий ID, просто чтобы увидеть отвечать.

Теперь давайте создадим маршрутизатор PUT; этот роутер будет обновлять данные по id. Чтобы использовать маршрутизатор PUT, вы должны добавить тело запроса для обновления данных.

Сейчас тестирую через Postman. Мы должны использовать метод PUT и использовать число в URL-адресе пути, попытаться использовать несуществующий идентификатор, просто чтобы увидеть ответ, как это было с использованием GET по идентификатору.

Последний маршрут УДАЛИТЬ поID. Здесь нет ничего удивительного, посмотрите на экран.

Сейчас тестирую через Postman. Вы должны использовать метод DELETE.

Все маршруты используют правильный ответ от ожидаемого кода статуса https://www.restapitutorial.com/httpstatuscodes.html, это очень важно, имейте в виду.
В теле каждого ответа мы используем «application/json», мы используем блок try/catch для обработки ошибок.
Я заканчиваю эту статью; Надеюсь, тебе понравилось. Следующую статью начнем с лицевой стороны. До скорой встречи.
Клейсон Феррейра де Мело
Обучение инструктора Эстии
Окончательный код
//product-router.js
import express from 'express';
import ProductModel from '../model/product-model';
const ProductRouter = express.Router();
ProductRouter.route('/')
.get((req, resp, next) => {
try {
ProductModel.find((error, product) => {
if (error) {
resp.status(400).json({
message: error,
});
next(error);
} else {
resp.status(200).json(product);
}
});
} catch (error) {
resp.status(500).json({
message: error,
});
next(error);
}
})
.post((req, resp, next) => {
try {
let product = new ProductModel(req.body);
product.save(error => {
if (error) {
resp.status(400).json({
message: error,
});
next(error);
} else {
resp.status(201).json(product);
}
});
} catch (error) {
resp.status(500).json({
message: error,
});
next(error);
}
});
ProductRouter.use('/:id', (req, resp, next) => {
try {
ProductModel.findById(req.params.id, (error, product) => {
if (error) {
resp.status(400).json({
message: error,
});
next(error);
} else if (!product) {
resp.status(404).json({
message: `Resource ${req.params.id} not found`,
});
} else {
req.product = product;
next();
}
});
} catch (error) {
resp.status(500).json({
message: error,
});
next(error);
}
});
ProductRouter.route('/:id')
.get((req, resp, next) => {
resp.status(200).json(req.product);
})
.put((req, resp, next) => {
try {
req.product.name = req.body.name;
req.product.value = req.body.value;
req.product.quantity = req.body.quantity;
ProductModel.findOneAndUpdate(
{ _id: req.params.id },
{
$set: {
name: req.body.name,
value: req.body.value,
quantity: req.body.quantity,
},
},
{ new: true, setDefaultsOnInsert: true }
)
.then(product => {
resp.status(202).send(product);
})
.catch(error => {
resp.status(400).json({
message: error,
});
next(error);
});
} catch (error) {
resp.status(500).json({
message: error,
});
next(error);
}
})
.delete((req, resp, next) => {
try {
req.product._id = req.params.id;
ProductModel.findOneAndDelete(req.params.id, (error, product) => {
if (error) {
resp.status(400).json({
message: error,
});
next(error);
} else {
resp.status(204).send(product);
}
});
} catch (error) {
resp.status(500).json({
message: error,
});
next(error);
}
});
export default ProductRouter;