"SwaggerUI - 실행 전 응답 UI 노출 방지 로직 추가
- Execute 클릭 여부 확인 pendingExecute 플래그 도입 - 네트워크 에러/응답 처리 시 플래그 초기화 추가"
This commit is contained in:
@@ -26,6 +26,9 @@
|
|||||||
|
|
||||||
var startTs = 0;
|
var startTs = 0;
|
||||||
var targetOpblock = null;
|
var targetOpblock = null;
|
||||||
|
// Execute 클릭 후에만 true. spec 로딩 등 실행 외 응답이 responseInterceptor 로
|
||||||
|
// 들어와도 그리드를 만들지 않기 위한 게이트 (실행 전 UI 미노출 보장).
|
||||||
|
var pendingExecute = false;
|
||||||
|
|
||||||
function now() {
|
function now() {
|
||||||
return (global.performance && performance.now) ? performance.now() : Date.now();
|
return (global.performance && performance.now) ? performance.now() : Date.now();
|
||||||
@@ -206,6 +209,7 @@
|
|||||||
|
|
||||||
// 네트워크/CORS 실패 렌더: responseInterceptor 로 오지 않고 store 에만 error 로 남는 케이스.
|
// 네트워크/CORS 실패 렌더: responseInterceptor 로 오지 않고 store 에만 error 로 남는 케이스.
|
||||||
function renderNetworkError(msg) {
|
function renderNetworkError(msg) {
|
||||||
|
pendingExecute = false;
|
||||||
var grid = gridFor(targetOpblock);
|
var grid = gridFor(targetOpblock);
|
||||||
if (!grid) return;
|
if (!grid) return;
|
||||||
grid.classList.remove("djb-empty");
|
grid.classList.remove("djb-empty");
|
||||||
@@ -250,6 +254,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
startTs = now();
|
startTs = now();
|
||||||
|
pendingExecute = true;
|
||||||
var grid = gridFor(targetOpblock);
|
var grid = gridFor(targetOpblock);
|
||||||
if (grid) {
|
if (grid) {
|
||||||
grid.classList.add("djb-empty");
|
grid.classList.add("djb-empty");
|
||||||
@@ -264,10 +269,13 @@
|
|||||||
*/
|
*/
|
||||||
function renderResponse(res) {
|
function renderResponse(res) {
|
||||||
if (!res) return;
|
if (!res) return;
|
||||||
// spec 로딩 응답(/…/swagger.json)은 responseInterceptor 로도 들어온다. 이때 렌더하면
|
// Execute 를 누른 적 없으면 무시 — spec 로딩(/…/swagger.json) 응답도
|
||||||
// 실행 전인데 응답 본문에 OpenAPI spec 이 그려지므로 무시한다. 사용자 API 호출은
|
// responseInterceptor 로 들어오는데, 이때 렌더하면 실행 전 응답 본문에
|
||||||
// 프록시(/api/call-api)로 나가므로 url 에 swagger.json 이 없다.
|
// OpenAPI spec 이 그려진다. url 검사는 버전에 따라 res.url 이 비어 무력화될
|
||||||
|
// 수 있어 실행 게이트를 1차 방어로 둔다.
|
||||||
|
if (!pendingExecute) return;
|
||||||
if (res.url && res.url.indexOf("swagger.json") !== -1) return;
|
if (res.url && res.url.indexOf("swagger.json") !== -1) return;
|
||||||
|
pendingExecute = false;
|
||||||
var ms = Math.max(0, Math.round(now() - startTs));
|
var ms = Math.max(0, Math.round(now() - startTs));
|
||||||
var status = res.status || 0;
|
var status = res.status || 0;
|
||||||
var statusText = res.statusText || "";
|
var statusText = res.statusText || "";
|
||||||
|
|||||||
Reference in New Issue
Block a user