А так же о всякой фигне
Я уже писал как создать API сервер на вебсокетах и express.js. В этот раз мы будем делать классически REST сервер. В качестве основы будем использовать Hapi.
Для начала создаём папку с проектом, пусть это будет api-server, внутри создаём package.json
frfr@lenochka:~/programms/api-server$ cat package.json { "name": "api-server", "version": "1.0.0", "description": "API server", "main": "server.js", "scripts": {}, "author": "", "license": "ISC", "dependencies": {} }
И ставим первую пачку пакетов:
npm i hapi boom filepaths hapi-boom-decorators
Далее нужно создать следующую структуру папок:
Заполним config.js:
module.exports = { server: { host: '0.0.0.0', port: 3030 } }
Теперь начинаем писать server.js. Сперва подключаем модули:
#!/usr/bin/env node 'use strict'; const Hapi = require('hapi'); const filepaths = require('filepaths'); const hapiBoomDecorators = require('hapi-boom-decorators'); const config = require('./config');
Инициализацию сервера запихиваем в отдельную async функцию, чтобы мы могли использовать await внутри неё:
async function createServer() { // Инициализируем сервер const server = await new Hapi.Server(config.server); // Решистрируем расширение await server.register([ hapiBoomDecorators ]); // Загружаем все руты из папки ./src/routes/ let routes = filepaths.getSync(__dirname + '/src/routes/'); for(let route of routes) server.route( require(route) ); // Запускаем сервер try { await server.start(); console.log(`Server running at: ${server.info.uri}`); } catch(err) { // если не смогли стартовать, выводим ошибку console.log(JSON.stringify(err)); } // Функция должна возвращать созданый сервер, зачем оно нужно, расскажу далее return server; } createServer();
Теперь нужно написать наш единственный экшен: ./src/routes/root/get.js
// Наша функция, которая будет формировать ответ async function response() { // content-type будет автоматически пгенерироваться, в зависимости от того какой тип данных будет в ответе return { result: 'ok', message: 'Hello World!' }; } module.exports = { method: 'GET', // Метод path: '/', // Путь options: { handler: response // Функция, обработчик запроса, для hapi 17 должна возвращать промис } };
После этого можно запустить сервер:
node server.js
И проверяем наш сервер:
frfr@lenochka:~$ curl http://127.0.0.1:3030/ {"result":"ok","message":"Hello World!"} frfr@lenochka:~$ curl http://127.0.0.1:3030/test {"statusCode":404,"error":"Not Found","message":"Not Found"}
Наша заготовка под сервер готова. Новые руты добавляем в ./src/routes/ каждый метод в свой отдельный файл. Подробности по опциям рута на офф сайте: https://hapijs.com/tutorials/routing
Архив с примером: https://github.com/hololoev/api_hapi_example_1
Открытие ИП в Грузии для программиста- удалёнщика
Сегодня я потратил пол дня и обошел налоговую, дом юстиций, и банк, в Батуми, в Грузии. И вот что узнал.
Создаём REST API сервер на Hapi часть 2: ORM sequelize, инициализация базы данных, конфиги
Для работы с базами данных будем использовать ОРМ sequelize. Если Вы читаете это, то Вам даже не стоит задумываться о том, чтобы использовать прямые запросы в бд.