Несколько экземпляров сервера с помощью Хапи.рамки js

Я приближаюсь к этой структуре для node.реализация по нескольким причинам. Простота, большая модульность и быстрая конфигурация из коробки. Вскоре я столкнулся с концепцией стаи, которую я никогда не видел во время моего опыта в изучении экспресса.JS-фреймворка. Из официального руководства приведен следующий пример:

var Good = require('good');

server.pack.register(Good, function (err) {
    if (err) {
        throw err; // something bad happened loading the plugin
    }

    server.start(function () {
        server.log('info', 'Server running at: ' + server.info.uri);
    });
});

Они говорят о пакете:

пакеты-это способ для hapi объединить несколько серверов в один блок, и предназначены для дать единый интерфейс при работе с подключаемый модуль.

эта концепция странная для меня. Сколько раз мы работаем с разными серверами в проекте? Кроме того, мне не ясно, должен ли я каждый раз звонить pack для регистрации плагинов в hapi.

обновление: это код api pre v8, способ регистрации плагина был изменен. (звоните register непосредственно на server)

4 ответов


эта концепция странная для меня. Сколько раз мы работаем с разными серверами в проекте?

один пример, когда у вас есть api и веб-сервер. Они обычно разрабатываются отдельно, часто в отдельных хранилищах. Затем вы можете создать третий проект, который объединяет эти плагины:

var Hapi = require('hapi');

var manifest = {
  servers: [
    {
      host: 'localhost',
      port: 8000,
      options: {
        labels: 'api',
        cors: true
      }
    },
    {
      host: 'localhost',
      port: 8001,
      options: {
        labels: 'web'
      }
    }
  ],
  plugins: {
    './example-api': [{select: 'api'}],
    './example-web': [{select: 'web'}]
  }
};

Hapi.Pack.compose(manifest, function(err, pack) {
  pack.start();
});

кроме того, мне не ясно, должен ли я когда-либо звонить Time pack для регистрации плагинов в Хапи.

да, вам нужно позвонить pack.register() когда вы хотите зарегистрировать плагин. Однако вы можете зарегистрировать несколько плагинов сразу:

plugin.register([
  require('crumb'),
  require('hapi-auth-cookie')
], function (err) {
  // Error handling
}

Посетите Ссылку:http://cronj.com/blog/hapi-mongoose

пример проекта, который может помочь вам РЕПО ссылка:https://github.com/gauravgupta90/Hapi-Mongoose-Angular

для версии hapi ранее 8.x

var server = Hapi.createServer(host, port, {
    cors: true
});

server.start(function() {
    console.log('Server started ', server.info.uri);
});

для новой версии hapi

var Hapi = require('hapi');

var server = new Hapi.Server();
server.connection({ port: app.config.server.port });

Hapi.Pack() больше не доступен в новейших версиях Hapi (8.икс.) Они вытащили функциональность в небольшую библиотеку под названием Glue. Вы можете найти его здесь:https://github.com/hapijs/glue. Это работает точно, как Hapi.Pack() используется для.


по умолчанию hapi поддерживает несколько соединений, и вы можете настроить их по отдельности, например установка плагинов только для выбранного сервера (например, только API).

вы можете создать экземпляр и запустить несколько соединений, как это:

const hapi = require('hapi');  
const port = 3000;  
const _ = require('lodash');

// Create hapi server instance
const server = new hapi.Server();

// add connection parameters
server.connection({  
    host: 'localhost',
    port: process.env.PORT || port
});

server.connection({  
    host: 'localhost',
    port: process.env.PORT + 1 || port + 1
});

// Start the server
server.start(function () {  
    // Log to the console the host and port info
    _.forEach(server.connections, function(connection) {
        console.log('Server started at: ' + connection.info.uri);
    });
});

надеюсь, что это поможет.

Если вам нужны более подробные сведения об этой теме, вы можете найти их в этом руководстве по как запустить отдельный frontend и backend серверов в один проект