Javascript 如何连接HapiJs和Swagger?
我正试图将Hapijs与Stragger项目联系起来。我目前正在使用这个软件包 这是我的密码:Javascript 如何连接HapiJs和Swagger?,javascript,node.js,hapijs,Javascript,Node.js,Hapijs,我正试图将Hapijs与Stragger项目联系起来。我目前正在使用这个软件包 这是我的密码: const Inert = require('inert'); const Vision = require('vision'); server.register([ Inert, Vision, { 'register': require('hapi-swagger'), 'options': options } ], (err) =
const Inert = require('inert');
const Vision = require('vision');
server.register([
Inert,
Vision,
{
'register': require('hapi-swagger'),
'options': options
}
], (err) => {
server.start((err) => {
if (err) {
console.log(err);
} else {
console.log('Server running at:', server.info.uri);
}
});
});
我收到了这个错误信息
if (plugin.register.register) { // Required plugin
^
TypeError: Cannot read property 'register' of undefined
依赖关系
"hapi": "^16.6.2",
"hapi-swagger": "^8.0.0",
我已经实现了像这样的大摇大摆希望这将为你工作
'use strict';
const HapiSwagger = require('hapi-swagger');
const Inert = require('inert');
const Vision = require('vision');
const Config = require('config');
const DatabaseSetting = Config.get('DatabaseSettings');
//Register Swagger
const Pack = require('../package');
exports.register = (server, options,next) => {
server.register([
Inert,
Vision,
{
'register': HapiSwagger,
'options': {
'info': {
'title': `API Documentation for ${DatabaseSetting.env} environment`,
'version': Pack.version,
//'description':'Please use "accept :application/vnd.easyme.version.v1+json" for api versioning'
},
'schemes': ['http'],
'pathPrefixSize':2,
'basePath': '/',
documentationPath:'/doc',
debug:true
}
}], (err) => {
if (err) {
server.log(['error'], `hapi-swagger load error: ${err}`)
}else{
server.log(['start'], 'hapi-swagger interface loaded')
}
});
next();
};
exports.register.attributes = {
name: 'swagger-plugin'
};
在server.js
上,我有一个导入文件,并像这样注册
// Register All Plugins
server.register(Plugins, err => {
if (err) {
server.error(`Error while loading plugins : ${err}`)
} else {
server.log('info', 'Plugins Loaded')
}
})
我已经为swagger插件注册创建了一个单独的文件。您可以添加类似的文件,只需传递服务器上下文即可注册插件 如果项目中没有使用Winston和Raven(Sentry.io),您可以删除它们 package.json中的代码片段
"hapi": "^16.6.2",
"hapi-swagger": "^8.0.0",
"inert": "^4.2.1",
"vision": "^4.1.1",
hapi swagger.js
/**
* Embeds Hapi-Swagger plugin to the server
*/
/* jslint node: true */
/* jshint esversion: 6 */
'use strict';
const Inert = require('inert');
const Vision = require('vision');
const Winston = require('logger/WinstonPlugin');
const Raven = require('errors/RavenPlugin');
const environment = require('config').environment;
const port = require('config').port;
const swaggerOptions = {
info: {
title: 'API Documentation - [' + environment + ':' + port + ']'
},
tags: [{
name: 'user',
description: 'Related to User Object'
}, {
name: 'email',
description: 'For verification of User Email'
}, {
name: 'session',
description: 'Session Management'
}, {
name: 'account',
description: 'User Account'
}],
jsonEditor: true,
grouping: 'tags',
securityDefinitions: {
Bearer: {
type: 'apiKey',
name: 'Authorization',
in: 'header',
"scopes": {
"write:pets": "modify pets in your account",
"read:pets": "read your pets"
}
}
}
};
/**
* Registers Swagger Plugin in Hapi Server object
* @param {*} server - Hapi.Server
*/
function RegisterSwaggerPlugin(server) {
if (!server) return;
server.register([Inert, Vision,
{
register: require('hapi-swagger'),
options: swaggerOptions
}
], function (err) {
if (err) {
Winston.error(['error'], 'hapi-swagger load error: ' + err);
Raven(err);
} else {
Winston.debug('hapi-swagger interface loaded');
}
});
}
module.exports = RegisterSwaggerPlugin;
// Add Swagger Plugin here
require('plugin-registration/hapi-swagger')(server);
您可以像这样从server.js文件注册插件
server.js
/**
* Embeds Hapi-Swagger plugin to the server
*/
/* jslint node: true */
/* jshint esversion: 6 */
'use strict';
const Inert = require('inert');
const Vision = require('vision');
const Winston = require('logger/WinstonPlugin');
const Raven = require('errors/RavenPlugin');
const environment = require('config').environment;
const port = require('config').port;
const swaggerOptions = {
info: {
title: 'API Documentation - [' + environment + ':' + port + ']'
},
tags: [{
name: 'user',
description: 'Related to User Object'
}, {
name: 'email',
description: 'For verification of User Email'
}, {
name: 'session',
description: 'Session Management'
}, {
name: 'account',
description: 'User Account'
}],
jsonEditor: true,
grouping: 'tags',
securityDefinitions: {
Bearer: {
type: 'apiKey',
name: 'Authorization',
in: 'header',
"scopes": {
"write:pets": "modify pets in your account",
"read:pets": "read your pets"
}
}
}
};
/**
* Registers Swagger Plugin in Hapi Server object
* @param {*} server - Hapi.Server
*/
function RegisterSwaggerPlugin(server) {
if (!server) return;
server.register([Inert, Vision,
{
register: require('hapi-swagger'),
options: swaggerOptions
}
], function (err) {
if (err) {
Winston.error(['error'], 'hapi-swagger load error: ' + err);
Raven(err);
} else {
Winston.debug('hapi-swagger interface loaded');
}
});
}
module.exports = RegisterSwaggerPlugin;
// Add Swagger Plugin here
require('plugin-registration/hapi-swagger')(server);
因此,通过这种方式,只要你想阻止插件注册,就可以通过评论一行来实现。请分享你的代码