Javascript 如何在Hapi.js中正确注册插件
我在hapi的官方网站上尝试了一个简单的服务器,但失败了:我无法注册插件Javascript 如何在Hapi.js中正确注册插件,javascript,node.js,plugins,hapijs,Javascript,Node.js,Plugins,Hapijs,我在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; } ser
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
我会将hapi的版本升级到最新版本,这两个插件的版本似乎只适用于最新版本的hapi。根据v17文档:
等待服务器。注册(插件,[选项])
在以下位置注册插件:
- 插件-一个或一组:
- a
- 具有以下内容的对象:
-插件对象插件
-(可选)注册期间传递给插件的选项李>选项
,一次
-(可选)插件特定的注册选项,定义如下路由
- 选项-(可选)注册选项(不同于传递给注册函数的选项):
-如果一次
,则跳过同一插件的后续注册,不会出现错误。不能与插件选项一起使用。默认为为true
。如果未设置为false
,则第二次出现错误时将抛出错误 插件已在服务器上注册true
-应用于插件添加的每条路由的修饰符:路由
-作为前缀添加到任何路由路径的字符串(必须以前缀
)。如果一个插件注册了一个子插件,“/”开头
前缀是 传递给子对象或添加到子对象的前面 前缀
-应用于每个路由的虚拟主机字符串(或字符串数组)。最外层的vhost
覆盖任何嵌套配置vhost
插件对象是具有以下属性的对象:
注册
-(必需)注册功能与签名异步功能(服务器,选项)
其中:
server-具有特定于插件的服务器对象
server.realm`
options
-在注册期间通过server.register()传递给插件的任何选项
name
-(必需)插件名称字符串。该名称用作唯一键。已发布的插件(例如,在npm注册表中发布)
应使用与其“package.json”中的名称字段相同的名称
文件每个应用程序中的名称必须是唯一的
version
-(可选)插件版本字符串。该版本仅用于使其他插件能够找到版本的信息
加载。版本应与中指定的版本相同
插件的“package.json”文件
multiple
-(可选)如果true
,则允许在同一服务器上多次注册插件。默认值为false
依赖关系
-(可选)表示插件依赖关系的字符串或字符串数组。与通过设置依赖项相同
server.dependency()
once
-(可选)如果true
,则每个服务器只注册一次插件。如果设置,将覆盖传递给的选项一次
server.register()
。默认为无覆盖
因此,对于您的用法,请尝试:
const Inert = require('inert');
const Vision = require('vision');
await server.register([Inert.plugin, Vision.plugin]);
这个问题的回答是否令您满意?如果是,请您将下面的一个答案标记为已接受答案?谢谢
const Inert = require('inert');
const Vision = require('vision');
await server.register([Inert.plugin, Vision.plugin]);