出于几个原因,我正在接近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
答案 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.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
中找到它们