Часть 2. Создание конечных точек API для публикации или получения данных
В этой статье вы узнаете, как создаются конечные точки для выполнения операции CRUD (создание, чтение, обновление, удаление) с данными, хранящимися в базе данных MongoDB Atlas, с использованием Rest-API.
В приведенной выше статье мы увидели, как настроить проект Node.js и подключить нашу базу данных MongoDB к Node.js. Теперь мы начнем с создания конечных точек api.
1. Сначала мы должны создать схему того типа данных, который мы хотим в нашем API, мы создадим схему для продуктов в магазине.
Создайте папку в главном каталоге с именами модели и создайте файл с именем Products.js и следующий код.
const mongoose = require('mongoose') // required to make the schema const ProductSchema = mongoose.Schema({ name: { type: String, required: true }, price: { type: Number, required: true, }, }) // we are exporting our schema for table Products. module.exports = mongoose.model('Products', ProductSchema)
2. Мы должны определить маршруты для получения данных и публикации данных.
Создайте папку с именем routes в главном каталоге, а затем создайте файл с именем product.js.
Перейдите к app.js в главном каталоге и напишите код входа для маршрута продукта, как показано ниже, перед кодом подключения mongodb:
// making the /products route for our product const ProductRoute = require('./Routes/Product'); app.use('/products', ProductRoute)
Перейдите к файлу product.js в папке routes, чтобы начать создание маршрута получения и отправки, как описано ниже:
// we are making express router to handle different kinds of request like get/post/patch/delete const express = require('express') const router = express.Router() // We will me making this file in next step which will handle all our logic const ProductController = require('../controllers/product') // All these routes are there for our products like this: // (http://localhost:5000/products/get) for getting all product // (http://localhost:5000/products/post) for posting a product router.get('/get', ProductController.get_all_product); router.post('/post',ProductController.create_product) router.get('/:productId', ProductController.get_single_product) router.patch('/:productId',ProductController.patch_product_details) router.delete('/:productId',ProductController.delete_product) module.exports = router
3. Заставить контроллер обрабатывать всю логику маршрутов.
Перейдите в основной каталог проекта и создайте папку с именем контроллер и создайте внутри нее файл с именем product.js.
Теперь в этом файле будет вся логика маршрута, как показано ниже.
Для / получения запроса:
// schema of the product table const Product = require('../models/Product') // Logic for the get request to get all the products exports.get_all_product = async (req, res) => { try { // finding all the product in the table const products = await Product.find() // To check in the console console.log(products) res.send(products) }catch (err) { res.send({ message: err }) } } // Logic for the get request to get the single product exports.get_single_product = (req, res) => { const id = req.params.productId; //get the productid from params Product.findById(id) .then(result => { res.send(result) // if product is found then returned }) .catch(err => { res.send({message: err}) //gives error if product not found }) }
для / post запрос
exports.create_product = async (req, res) => { console.log(req.file) // retrieving data from json body of post request const product = new Product({ name: req.body.name, price: req.body.price, }); product.save() .then(result => { res.status(200).send({ _id: result._id, name: result.name, price: result.price, request: { type: 'GET', url: 'http://localhost:5000/products/' + result._id } }) }) .catch(err => { res.send({ message: err }) }) }
для запроса / патча
exports.patch_product_details = (req, res) => { const id = req.params.productId; // get product ID from params const update = {} // checks for the value to be updated in item for (const ops of req.body) { update[ops.propName] = ops.value; } Product.update({ _id: id }, { $set: update }) .exec() .then(result => { res.send(result) }) .catch(err => { res.send(err) }) }
для запроса / удаления
exports.delete_product = (req, res) => { const id = req.params.productId; //checks for productId to delete Product.remove({ _id: id }) // removes product from table .exec() .then(result => { res.send(result) //sends the result back }) .catch(err => { res.send(err) // sends error if product is not updated }) }
Мы выполнили все маршруты и логику, необходимые для работы API, вы можете проверить свой API, попробовав любые инструменты тестирования API, такие как Postman.
Пропустили часть 1? Посмотрите это ниже
Возникла ошибка? Без проблем! Оставьте комментарий и я обязательно постараюсь его решить.
Больше контента на plainenglish.io