Hapi.js е малка Node рамка за разработване на задните уеб приложения.

В тази статия ще разгледаме как да създаваме back end приложения с Hapi.js.

Приготвяме се да започнем

Можем да започнем, като създадем папка на проекта, влезем в нея и стартираме:

npm install @hapi/hapi

за инсталиране на пакета.

Създаване на сървър

След като инсталираме пакета, можем да създадем просто приложение за задния край, като напишем:

const Hapi = require('@hapi/hapi');
const init = async () => {
  const server = Hapi.server({
    port: 3000,
    host: '0.0.0.0'
  });
  server.route({
    method: 'GET',
    path: '/',
    handler: (request, h) => {
      return 'Hello World!';
    }
  });
await server.start();
  console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
  console.log(err);
  process.exit(1);
});
init();

Изискваме пакета hapi.

След това стартираме метода Hapi.server, за да създадем сървъра.

host е настроено на '0.0.0.0', за да слуша за заявка от всички IP адреси.

И след това, за да създадем маршрут, извикваме метода server.route.

method е методът на заявката.

handler е функцията за обработка на заявки.

След това извикваме server.start, за да стартираме сървъра.

След това добавяме манипулатора на грешки unhandledRejection за изящно излизане от приложението, когато то се срине.

Удостоверяване

Можем да добавим удостоверяване към нашето приложение с няколко реда код.

Например, можем да напишем:

const Bcrypt = require('bcrypt');
const Hapi = require('@hapi/hapi');
const users = {
  john: {
    username: 'john',
    password: '$2a$10$iqJSHD.BGr0E2IxQwYgJmeP3NvhPrXAeLSaGCj6IR/XU5QtjVu5Tm',
    name: 'John Doe',
    id: '1'
  }
};
const validate = async (request, username, password) => {
  const user = users[username];
  if (!user) {
      return { credentials: null, isValid: false };
  }
const isValid = await Bcrypt.compare(password, user.password);
  const credentials = { id: user.id, name: user.name };
  return { isValid, credentials };
};
const start = async () => {
  const server = Hapi.server({ port: 4000 });
  await server.register(require('@hapi/basic'));
  server.auth.strategy('simple', 'basic', { validate });
  server.route({
    method: 'GET',
    path: '/',
    options: {
        auth: 'simple'
    },
    handler(request, h) {
      return 'welcome';
    }
  });
  await server.start();
  console.log('server running at: ' + server.info.uri);
};
start();

за добавяне на просто удостоверяване с модулите bcrypt и hapi-basic.

Обектът users съдържа потребителските данни.

Функцията validate получава данните за заявката от параметъра request.

Получаваме потребителя чрез username.

След това извикваме Bcrypt.compare, за да сравним паролата, която сме въвели, с хеша, който сме съхранили в свойството password на обекта users.

Тогава имаме:

server.auth.strategy('simple', 'basic', { validate });

за да добавите основната стратегия за удостоверяване.

И ние определяме нашия маршрут с server.route .

Свойството options.auth е зададено на името на стратегията за удостоверяване, която добавихме.

Сега, когато отидем на маршрута /, виждаме диалоговия прозорец за влизане.

И когато въведем john за потребителско име и secret за парола, виждаме отговора welcome.

Заключение

Можем да създадем просто приложение с удостоверяване с Hapi.