Эта статья посвящена созданию RESTful API с использованием хапиджей и мангуста.

API будет обрабатывать CRUD для объекта [Волк], используя HTTP-глаголы - GET, PUT, POST и DELETE.

Ладно, приступим

Убедитесь, что на вашем компьютере установлен узел и пряжа как глобальный пакет.

Создайте каталог проекта с именем «/ hapijs-mongoose-restapi», запустите команду и заполните необходимые данные.

yarn init

Укажите основной файл как app.js

yarn init похож на npm init, при этом будет сгенерирован файл package.json. Подробнее см. yarn.

затем установите node_modules, которые нам нужны для этого API

yarn add hapi mongoose --dev

Создание сервера hapi в app.js

const Hapi = require('hapi');
const server = new Hapi.Server();
server.connection({
    host: 'localhost',    
    port: 4000
});

server.route({
    method: 'GET',
    path: '/',
    handler(request, reply) {
	reply('Hello, world!');
    }
});

server.route({
    method: 'GET',
    path: '/api',
    handler(request, reply) {
	reply('Hello, API!');
    }
});

server.start(err => {
    if (err) {
	throw err;
    }
    console.log(`Server running at: ${server.info.uri}`);
});

exports.server = server;
  • server.connection - для подключения к серверу с хостом и портом
  • server.route - будет содержать объект маршрута

В server.router обработчик вернется с использованием API return () - https://hapijs.com/api#replyerr-result, где возврат используется для завершения действия обработчика путем установки ответа и возврата ответ и статус обработчику.

  • server.start - Для запуска сервера

Запуск сервера и тестирование маршрута индекса

nodemon app.js


Давайте протестируем API с помощью Postman - приложения для Chrome / Mac.

откройте Почтальон, выберите команду GET HTTP, введите URL-адрес http: // localhost: 4000 и нажмите Отправить. В теле ответа должно быть указано Hapi World!.

Создайте подключение mongoDB к API, создайте файл database.js в корневом каталоге приложения.

var Mongoose = require('mongoose');
//load database
Mongoose.connect('mongodb://localhost/hapijs-mongoose-restapi/');
var db = Mongoose.connection;
db.on('error', console.error.bind(console, 'connection error'));
db.once('open', function callback() {
    console.log('Connection with database succeeded.');
});
exports.db = db;

и включите database.js в app.js

// app.js
const db = require('./database').db;

Это подключится к mongoDB, а затем давайте создадим модель схемы мангуста для наших волков, модели были помещены в каталог / models

МОДЕЛЬ ВОЛКА

путь для создания модели волка - /hapijs-mongoose-restapi/models/Wolf.js

Модель Wolf будет иметь только поле name, где SchemaType - String.

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
var WolfSchema = new Schema({
    name: String
});
module.exports = mongoose.model('Wolf', WolfSchema);

с созданной моделью Wolf.js, потребуйте это в app.js

// app.js
const Hapi = require('hapi');
const server = new Hapi.Server();
const db = require('./database').db;
...

Здесь будет работать nodemon, он будет следить за вашими изменениями в любом файле в каталоге приложения и перезапускает сервер за вас, без проблем с CTRL + C.

МАРШРУТЫ - Маршрут API по умолчанию

URL - http: // localhost: 4000 / api

// app.js
...
server.route({
    method: 'GET',
    path: '/api',
    handler: function (request, reply) {
        reply({'message': 'Hello, API!'});
    }
});

МАРШРУТЫ

Создайте файл routes.js и включите этот файл в app.js

// routes.js
module.exports = [];

затем включите этот routes.js в файл app.js

// app.js
…
const routes = require(‘./routes’);
server.route(routes);

Путь GET - ПОЛУЧЕНИЕ ВСЕХ ВОЛКОВ

Требовать модель Волка на router.js

URL - http: // localhost: 4000 / api / wolves

// routes.js
const Wolf = require('./models/Wolf');
module.exports = [
  {
      method: 'GET',
      path: '/api/wolves',
      handler: function (request, reply) {
          Wolf.find(function(error, wolves) {
              if (error) {
                  console.error(error);
              }
              reply(wolves);
          });
      }
  }
];

Это простой маршрут, который отобразит всех волков в формате JSON.

ПОЧТОВЫЙ Маршрут - СПАСЕНИЕ ВОЛКА

В routes.js создайте модуль для POST, который предназначен для сохранения Wolf

URL - http: // localhost: 4000 / api / wolves / GrayWolf

// routes.js
const Wolf = require('./models/Wolf');
module.exports = [
  {
      method: 'GET',
      path: '/api/wolves',
      handler: function (request, reply) {
          Wolf.find(function(error, wolves) {
              ...
          });
      }
  },
  {
      method: ['PUT', 'POST'],
      path: '/api/wolves/{name}',
      handler: function (request, reply) {          
          const wolf = new Wolf({
              name: request.params.name
          });
          wolf.save(function(error, wolf) {
            if (error) {
                console.error(error);
            }
            reply(wolf.id);
          });
      }
  }
];

Это вернет идентификатор объекта, созданный в mongoDB.

Вы можете найти исходный код здесь.

Заключение

Теперь у нас есть способы обрабатывать CRUD на Wolves с помощью hapiJS.

Нажмите js-rest-api на значок сердца, который находится под этим сообщением, и если у вас есть какие-либо вопросы, прокомментируйте ниже.