хуйу нас не матерятся
Оглавление
Я уже писал как создать 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
Привет. Для автотестов, вот тут рассказал: https://allwebstuff.info/hapi-autotest-autogeneration
Доброго дня. Так для чего делаем return server; в функции function createServer()?