7

出于几个原因,我正在接近这个 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:

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

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

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

4

4 回答 4

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

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

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

plugin.register([
  require('crumb'),
  require('hapi-auth-cookie')
], function (err) {
  // Error handling
}
于 2014-08-17T02:00:31.730 回答
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 });
于 2015-02-22T20:29:01.617 回答
1

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

于 2015-01-13T17:21:01.997 回答
1

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

希望有帮助。

如果您需要有关该主题的更多详细信息,可以在本教程中找到它们,了解如何在单个项目中运行单独的前端和后端服务器

于 2017-02-24T14:44:04.430 回答