我关注了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"
}
答案 0 :(得分:2)
根据https://hapijs.com/api#server.register()的v17文档:
await server.register(plugins, [options])
在以下位置注册插件:
插件 - 一个或一个数组:
- a plugin object。
- 具有以下内容的对象:
plugin
- 一个插件对象。options
- (可选)在注册期间传递给插件的选项。once
,routes
- (可选)特定于插件的注册选项,定义如下。选项 - (可选)注册选项(与传递给注册功能的选项不同):
once
- 如果true
,则会跳过同一插件的后续注册而不会出现错误。不能与插件选项一起使用。默认为false
。如果未设置为true
,则第二次抛出错误a 插件已在服务器上注册。routes
- 应用于插件添加的每条路线的修饰符:
prefix
- 将字符串添加为任何路径路径的前缀(必须以'/'
开头)。如果插件注册了子插件prefix
传递给孩子或在孩子面前添加 前缀。vhost
- 应用于每个路由的虚拟主机字符串(或字符串数组)。最外层vhost
会覆盖任何嵌套配置。返回值:无。
plugin object
是具有以下属性的对象:
register
- (必填)注册函数,签名为async function(server, options)
,其中:
server - the server object with a plugin-specific
server.realm`。options
- 通过server.register()
注册时传递给插件的所有选项。
name
- (必需)插件名称字符串。该名称用作唯一键。已发布的插件(例如在npm注册表中发布) 应该在'package.json'中使用与name字段相同的名称 文件。每个应用程序中的名称必须是唯一的。
version
- (可选)插件版本字符串。该版本仅用于提供信息,以使其他插件能够找到版本 加载。版本应与。中指定的版本相同 插件的'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]);
答案 1 :(得分:0)
我会将hapi的版本更新到最新版本,这两个插件的版本似乎只适用于最新版本的hapi。