【问题标题】:Multiple server instances by using Hapi.js framework使用 Hapi.js 框架的多个服务器实例
【发布时间】:2023-03-19 07:52:01
【问题描述】:

出于几个原因,我正在接近这个 node.js 框架。简单、出色的模块化和开箱即用的快速配置。很快就遇到了在学习express.js框架的过程中从未见过的Pack概念。以下示例来自官方指南:

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);
    });
});

他们说 Pack:

包是 hapi 将多个服务器组合成单个服务器的一种方式 单元,旨在在使用时提供统一的界面 插件。

这个概念对我来说很奇怪。我们在一个项目中使用不同的服务器多少次?另外我不清楚我是否应该每次都调用pack来在hapi中注册一个插件。

更新:这是pre v8 api代码,注册插件的方式已经改变。 (直接拨打registerserver

【问题讨论】:

    标签: javascript plugins hapijs


    【解决方案1】:

    这个概念对我来说很奇怪。我们在一个项目中使用不同的服务器多少次?

    一个例子是当你有一个 api 和一个 web 服务器时。这些通常是单独开发的,通常在单独的存储库中。然后,您可以创建结合这些插件的第三个项目:

    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();
    });
    

    另外我不清楚我是否应该调用 ever time pack 在 hapi 中注册插件。

    是的,您需要在注册插件时拨打pack.register()。但是您可以一次注册更多插件:

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

    【讨论】:

    • 如果我创建不同的服务器,我应该通过调用命令 pack.start() 来启动它,不是吗?
    【解决方案2】:

    访问链接:http://cronj.com/blog/hapi-mongoose

    可以帮助您回购的示例项目链接:https://github.com/gauravgupta90/Hapi-Mongoose-Angular

    适用于 8.x 之前的 hapi 版本

    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 });
    

    【讨论】:

      【解决方案3】:

      Hapi.Pack() 在最新版本的 Hapi (8.x) 中不再可用。他们已将功能提取到一个名为 Glue 的小型库中。你可以在这里找到它:https://github.com/hapijs/glue。它与 Hapi.Pack() 过去的工作方式完全相同。

      【讨论】:

        【解决方案4】:

        hapi默认支持多连接,你可以单独自定义,比如installing plugins only for a selected server (like API only)

        您可以像这样实例化并启动多个连接:

        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);
            });
        });
        

        希望对您有所帮助。

        如果您需要有关该主题的更多详细信息,可以在本教程中找到它们how to run separate frontend and backend servers within a single project

        【讨论】:

          猜你喜欢
          • 2014-05-24
          • 2016-11-20
          • 1970-01-01
          • 1970-01-01
          • 2013-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          相关资源
          最近更新 更多