Основная цель этого поста - объяснить концепцию разработки REST API (веб-сервисов) с использованием фреймворка node.js, express.js и Mongo DB с использованием mongoose. Разработка API с использованием этого сообщения полностью осуществляется в локальной системе (локальный запуск Node, сервер Mongo и т. Д.), Без использования какого-либо живого сервера. В этом посте я создаю API для ресторана, в котором есть категории (завтрак, обед, ужин, ужин и т. Д.) С изображением баннера, а в каждой категории есть список продуктов (гамбургеры, пицца, кока-кола) с изображениями баннеров.
ЭЙ! Зачем мне нужно этому учиться? Я мобильный разработчик.
Я думал так же. Около года назад я был просто разработчиком приложений для Android. Я использую API в своих приложениях, но понятия не имею о сценариях на стороне сервера. Проблема возникает, когда серверная и мобильная команда проводят встречи, и серверная команда чаще всего говорит, что мы не можем справиться с этим с нашей стороны, вы должны делать это на мобильной стороне, и они привели нам причины, с которыми я не согласен до сих пор.
Поэтому я решил изучить разработку API, я начал с основных PHP и MySQL, а теперь перехожу к Node и Mongo db. Я думаю, что каждый мобильный разработчик должен иметь представление (концепцию) об этом.
Приступим к взлому
Прежде всего, это требует настройки среды для node JS, Mongo DB, Express Framework и связанных модулей. Я готовлю различные сообщения для настройки всех вышеупомянутых необходимых js и фреймворка, чтобы этот пост был чистым и указывал только на разработку API. Следуйте приведенным ниже ссылкам для настройки каждого из них.
- Введение и настройка среды для Node JS.
- Введение и настройка среды Express framework, экспресс-генератора и связанных модулей.
- Введение и настройка среды базы данных Mongo.
- Введение и настройка среды для Mongoose.
После настройки всего, давайте создадим проект с помощью экспресс-генератора, запустив команду express в командной строке, и он сгенерирует базовую структуру проекта с файлами и каталогом. Подробно про экспресс-генератор и создание проекта.
Файл Package.json является манифестом этого проекта, независимо от того, какую зависимость вы устанавливаете и используете в этом проекте, она должна быть упомянута в этом файле в разделе зависимостей.
В каталоге bin есть файл с именем www, который является точкой входа в этот проект. Этот файл также устанавливает порт, на котором запускается этот локальный сервер узла:
var port = normalizePort(process.env.PORT || '3000'); //You can change this 3000 app.set('port', port);
После настройки нам нужно запустить локальный сервер базы данных Mongo, как указано в Настройка среды базы данных Mongo.
Создать соединение с базой данных Mongo с помощью Mongoos JS
В вашем app.js напишите следующий код -
var mongoose = require('mongoose'); var url = 'mongodb://127.0.0.1:27017/Restaurant'; // 27017 is local port at ehich your Mongo server is running // Restaurant is your document/database name and mongoose.connect(url); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error')); db.on('open', function(){ console.log('Connected'); });
Создать API для категорий
Сначала мы должны решить, что мы будем помещать в эту категорию, а затем создать схему (используя схему mongoos). Для понимания можно сказать, что схема похожа на модель. Я создаю каталог с именем model внутри своего проекта, и теперь я храню все файлы схемы / модели внутри этого каталога.
Категория-Model.js
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var categoryModel = new Schema({ name: { type:String, require:true, unique:true }, banner: { type:String, require:false }, description: { type:String, require:false } }, { timestamps:true //Add two field automatically, createAt, updateAt }); var Category = mongoose.model("category" ,categoryModel); module.exports = Category;
Теперь в каталоге routes создайте файл js, в котором находится весь код, связанный с разработкой API для категории (GET, POST, PUT, DELETE). Я сделал это с именем category-router.js.
Импортируйте необходимые файлы
var express = require('express'); var mongoose = require('mongoose'); var bodyParser = require('body-parser'); var category = require('../model/category-model.js'); var categoryRouter = express.Router(); categoryRouter.use(bodyParser.json());
Создайте GET API, который будет получать всю категорию.
categoryRouter.route('/') .get(function(req,res){ category.find({}, function(err, category){ if(err){ return fails(res, err); } else{ successGet(res,category); } //200, application/json }); });
Создайте POST API, который добавит категорию с изображением баннера.
categoryRouter.route('/') .post(function(req, res,next){ upload(req, res, function(err){ if(err){ // An error occurred when uploading return fails(res, err); } else{ // Everything went fine if(req.file ==- null || req.file === 'undefined'){ addCategory(req.body.name,'',req.body.description,res); } else{ addCategory(req.body.name,req.file.path, req.body.description,res); } } }); }); function addCategory(name, url, description, res) { category.create({"name":name,"banner":url,"description":description}, function(err, data){ if(err){ if (err.name === 'MongoError' && err.code === 11000) { // Duplicate category insertion return fails(res, 'Category already exist!'); } return fails(res, err); } else{ success(res, data); } res.end(); }) }
Функции поддержки, которые требуют печати ответа Json в каждом ответе API.
function successGet(res, data){ if(data === null || data[0] === null || data[0] === 'undefined'){ fails(res, "No item available") } else{ res.json({ success: true, message: "", data: data }); } } function success(res, data){ if(data === null){ fails(res, "No category available") } else{ res.json({ success: true, message: "", data: data }); } } function fails(res, err){ return res.status(500).send({ succes: false, message: err }); }
Для полного клона кода из гит-репозитория.
Для тестирования нашего API мы должны сначала убедиться, что наш сервер Mongo DB уже запущен, а теперь запустить сервер узла с помощью команды npm start в командной строке из каталога проекта.
Теперь все подключено, и мы тестируем наш API с помощью POSTMAN.
Остальной код API доступен в гит-репозитории. Вы можете клонировать весь проект и начать работать с ним.
Я закрываю этот пост здесь. Если у вас есть какие-либо проблемы, прокомментируйте или напишите мне @shadikkhan, а также поставьте лайк и порекомендуйте другим, если вам это поможет.
Удачного кодирования ……………… ..