使用Hapi.js框架的多个服务器实例

时间:2014-08-17 00:22:54

标签: javascript plugins hapijs

出于几个原因,我正在接近node.js的这个框架。简单,出色的模块化和开箱即用的快速配置。我很快就遇到了Pack的概念,这是我在学习express.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);
    });
});

他们说有关Pack:

  

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

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

更新:这是v8之前的api代码,注册插件的方式已经改变。 (直接在register

上致电server

4 个答案:

答案 0 :(得分:4)

  

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

一个例子是你有一个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();
});
  

另外我不清楚我是否应该随时打电话给hapi注册一个插件。

是的,当您想注册插件时,需要致电pack.register()。但是,您可以一次注册更多插件:

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

答案 1 :(得分: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);
});

for hapi new version

var Hapi = require('hapi');

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

答案 2 :(得分:1)

最新版本的Hapi(8.x)中不再提供

Hapi.Pack()。他们已将功能扩展到一个名为Glue的小型库中。你可以在这里找到它:https://github.com/hapijs/glue。它与Hapi.Pack()过去的工作方式完全相同。

答案 3 :(得分:1)

默认情况下,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

中找到它们