首先,我使用的是swagger-ui提供的标准html / js代码的修改版本。
更改非常简单,而不是仅使用单个SwaggerUI元素,如:
window.swaggerUi = new SwaggerUi({
....
window.swaggerUi.load();
我们迭代它们并创建许多swaggerUI元素:
function addSwaggerUI(url, dom_id, host){
window[dom_id] = new SwaggerUi({
....
window[domId].load();
这是我们的迭代:
var services = [{SERVICE_SPECS}];
var doc_container = document.getElementById('service-doc-container');
var index = 0;
services.forEach(function(serviceSpec) {
var swaggerNode = document.createElement('div');
swaggerNode.id = "swagger-ui-container-" + index;
swaggerNode.className = "swagger-ui-wrap";
var messageNode = document.createElement('div');
messageNode.id = "message-bar-" + index;
messageNode.className = "swagger-ui-wrap";
doc_container.appendChild(swaggerNode);
doc_container.appendChild(messageNode);
log("adding service documentation for " + serviceSpec);
addServiceDocumentation(serviceSpec, swaggerNode.id, "{SERVICE_HOST}");
index++;
});
这很安静,直到我们开始使用securityDefinitions oAuth:
"securityDefinitions": {
"OauthSecurity": {
"type": "oauth2",
"authorizationUrl": "http://localhost/oauth/dialog",
"flow": "implicit",
"scopes":{
"write:sessions":"kill sessions",
"read:sessions":"get sessions"
}
}
现在我得到每个swaggerUI这个错误:
index.js:24 Uncaught TypeError: Cannot read property 'api' of undefined
原始的swaggercode:https://github.com/swagger-api/swagger-ui/tree/master/dist请参阅index.html
有人可以帮忙解决这个问题吗? (替代解决方案:任何人都知道在一个html页面上从不同的json文件添加多个web apis的另一种方法吗?)
更新: 所以我查看了swagger.petstore.io生成的页面,发现了一些名为' authorzie-wrapper'我的代码中可能缺少此元素。