Я последовал за официальным сайтом hapi и попробовал простой сервер, но не смог: я не могу зарегистрировать плагины,
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({port: 4004});
server.register([require('inert'), require('vision')], (err) => {
if (err) {
throw err;
}
server.start(err => {
console.log('server started');
});
});
Это бросает ошибку:
/Users/apple/Documents/node_projects/hapijon/testjon/ch4_routes_and_handlers/node_modules/hapi/lib/plugin.js:219
if (plugin.register.register) { // Required plugin
^
TypeError: Cannot read property 'register' of undefined
at module.exports.internals.Server.internals.Plugin.register (/Users/apple/Documents/node_projects/hapijon/testjon/ch4_routes_and_handlers/node_modules/hapi/lib/plugin.js:219:29)
at Object.<anonymous> (/Users/apple/Documents/node_projects/hapijon/testjon/ch4_routes_and_handlers/tess.js:7:8)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Function.Module.runMain (module.js:676:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3
Вот мой package.json:
"dependencies": {
"accept": "^2.1.4",
"hapi": "^14.2.0",
"inert": "^5.0.1",
"iron": "^5.0.4",
"vision": "^5.3.0",
"wreck": "^14.0.2"
}
Согласно v17 документам на https://hapijs.com/api#server.register():
await server.register(plugins, [options])
Регистрирует плагин, где:
плагины - один или массив:
- объект плагина.
- объект со следующим:
plugin
- объект плагина.options
- (необязательные) параметры, переданные плагину во время регистрации.once
,routes
- (необязательные) параметры регистрации, зависящие от плагина, как определено ниже.опции - (необязательные) параметры регистрации (отличные от параметров, переданных функции регистрации):
once
- еслиtrue
, последующие регистрации одного и того же плагина пропускаются без ошибок. Нельзя использовать с плагинами. По умолчаниюfalse
. Если не установлено значениеtrue
, ошибка будет сброшена во второй раз, когда плагин зарегистрирован на сервере.routes
- модификаторы, применяемые к каждому маршруту, добавленному плагином:
prefix
- строка, добавленная как префикс для любого маршрута маршрута (должна начинаться с'/'
). Если плагин регистрирует дочерний плагин,prefix
передается дочернему элементу или добавляется перед префиксом для конкретного ребенка.vhost
- строка виртуального хоста (или массив строк), применяемая к каждому маршруту. Наружный наиболееvhost
перекрывает любую вложенную конфигурацию.Возвращаемое значение: нет.
Объект plugin object
- это объект со следующими свойствами:
register
- (требуется) функция регистрации с функциейasync function(server, options)
подписиasync function(server, options)
где:
server - the server object with a plugin-specific
сервером.realm '.options
- любые параметры, переданные плагину во время регистрации черезserver.register()
.
name
- (обязательно) строка имени плагина. Имя используется как уникальный ключ. Опубликованные плагины (например, опубликованные в реестре npm) должны использовать то же имя, что и поле имени в файле 'package.json'. Имена должны быть уникальными в каждом приложении.
version
- (необязательно) версия версии плагина. Версия используется только информативно, чтобы другие плагины могли узнать загруженные версии. Версия должна быть такой же, как и в файле plugin 'package.json'.
multiple
- (необязательно), еслиtrue
, позволяет плагину регистрироваться несколько раз с тем же сервером. По умолчаниюfalse
.
dependencies
- (необязательно) строки или массива строк, указывающих зависимость плагина. То же, что и настройки зависимостей черезserver.dependency()
.
once
- (необязательно), еслиtrue
, будет регистрировать только один плагин на сервере. Если установлено, переопределяет параметрonce
передаетсяserver.register()
. По умолчанию не отменяется.
Итак, для вашего использования попробуйте:
const Inert = require('inert');
const Vision = require('vision');
await server.register([Inert.plugin, Vision.plugin]);
Я бы повредил версию hapi до последней версии, версии этих 2 плагинов, похоже, работают только с последней версией hapi.