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