Основная цель этого поста - объяснить концепцию разработки 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. Следуйте приведенным ниже ссылкам для настройки каждого из них.

После настройки всего, давайте создадим проект с помощью экспресс-генератора, запустив команду 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, а также поставьте лайк и порекомендуйте другим, если вам это поможет.

Удачного кодирования ……………… ..