Nginx sub_filter 치환 규칙 우회를 위해 appUrl 호출 시 백틱 적용

This commit is contained in:
2026-05-26 22:16:48 +09:00
parent 519935e7a5
commit eda3b6a828
+11 -11
View File
@@ -109,7 +109,7 @@ document.addEventListener('DOMContentLoaded', () => {
checkAuth(); checkAuth();
function logUiEvent(action, details = {}) { function logUiEvent(action, details = {}) {
fetch(appUrl('/api/settings/log-ui-event'), { fetch(appUrl(`/api/settings/log-ui-event`), {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ action, details }) body: JSON.stringify({ action, details })
@@ -120,7 +120,7 @@ document.addEventListener('DOMContentLoaded', () => {
if (!dbSizeBadge) return; if (!dbSizeBadge) return;
dbSizeBadge.textContent = '용량 확인 중'; dbSizeBadge.textContent = '용량 확인 중';
const targetUrl = appUrl('/api/settings/database-size'); const targetUrl = appUrl(`/api/settings/database-size`);
try { try {
const response = await fetch(targetUrl); const response = await fetch(targetUrl);
if (!response.ok) { if (!response.ok) {
@@ -198,7 +198,7 @@ document.addEventListener('DOMContentLoaded', () => {
// 여기서는 is_admin 확인 + 세션 만료 시 다시 dbx-main 으로 보내는 역할만 한다. // 여기서는 is_admin 확인 + 세션 만료 시 다시 dbx-main 으로 보내는 역할만 한다.
async function checkAuth() { async function checkAuth() {
try { try {
const res = await fetch(appUrl('/api/users/me')); const res = await fetch(appUrl(`/api/users/me`));
if (res.ok) { if (res.ok) {
currentUser = await res.json(); currentUser = await res.json();
if (btnDataManagement) { if (btnDataManagement) {
@@ -207,7 +207,7 @@ document.addEventListener('DOMContentLoaded', () => {
} else if (res.status === 401) { } else if (res.status === 401) {
// 세션 만료 — dbx-main 로그인으로 위임 (next 로 현재 위치 보존) // 세션 만료 — dbx-main 로그인으로 위임 (next 로 현재 위치 보존)
const next = encodeURIComponent((APP_BASE_PATH || '') + '/'); const next = encodeURIComponent((APP_BASE_PATH || '') + '/');
window.location.href = appUrl('/login') + '?next=' + next; window.location.href = appUrl(`/login`) + '?next=' + next;
} }
} catch (error) { } catch (error) {
console.error('Auth check error', error); console.error('Auth check error', error);
@@ -313,7 +313,7 @@ document.addEventListener('DOMContentLoaded', () => {
}; };
try { try {
const res = await fetch(appUrl('/api/orders/upload'), { const res = await fetch(appUrl(`/api/orders/upload`), {
method: 'POST', method: 'POST',
body: formData body: formData
}); });
@@ -970,7 +970,7 @@ document.addEventListener('DOMContentLoaded', () => {
}, 500); }, 500);
try { try {
const res = await fetch(appUrl('/api/settings/optimize'), { const res = await fetch(appUrl(`/api/settings/optimize`), {
method: 'POST' method: 'POST'
}); });
const data = await res.json(); const data = await res.json();
@@ -1049,7 +1049,7 @@ document.addEventListener('DOMContentLoaded', () => {
btnBackupDb.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> 백업 생성 중...'; btnBackupDb.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> 백업 생성 중...';
try { try {
const res = await fetch(appUrl('/api/settings/backup-db')); const res = await fetch(appUrl(`/api/settings/backup-db`));
if (res.ok) { if (res.ok) {
await downloadFileFromResponse(res, 'OMS_DB_backup.db'); await downloadFileFromResponse(res, 'OMS_DB_backup.db');
showToast('DB 백업 다운로드가 완료되었습니다.', 'success'); showToast('DB 백업 다운로드가 완료되었습니다.', 'success');
@@ -1074,7 +1074,7 @@ document.addEventListener('DOMContentLoaded', () => {
btnDownloadEventLog.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> 로그 생성 중...'; btnDownloadEventLog.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> 로그 생성 중...';
try { try {
const res = await fetch(appUrl('/api/settings/download-log')); const res = await fetch(appUrl(`/api/settings/download-log`));
if (res.ok) { if (res.ok) {
await downloadFileFromResponse(res, 'OMS_event_log.csv'); await downloadFileFromResponse(res, 'OMS_event_log.csv');
showToast('이벤트 로그 다운로드가 완료되었습니다.', 'success'); showToast('이벤트 로그 다운로드가 완료되었습니다.', 'success');
@@ -1174,7 +1174,7 @@ document.addEventListener('DOMContentLoaded', () => {
} }
try { try {
const res = await fetch(appUrl('/api/settings/restore-db'), { const res = await fetch(appUrl(`/api/settings/restore-db`), {
method: 'POST', method: 'POST',
body: formData body: formData
}); });
@@ -1297,7 +1297,7 @@ document.addEventListener('DOMContentLoaded', () => {
if (deleteEventSource) deleteEventSource.close(); if (deleteEventSource) deleteEventSource.close();
}; };
const res = await fetch(appUrl('/api/settings/delete-orders-by-date-range'), { const res = await fetch(appUrl(`/api/settings/delete-orders-by-date-range`), {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ body: JSON.stringify({
@@ -1355,7 +1355,7 @@ document.addEventListener('DOMContentLoaded', () => {
btnDeleteAllOrders.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> 전체 삭제 중...'; btnDeleteAllOrders.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> 전체 삭제 중...';
try { try {
const res = await fetch(appUrl('/api/settings/delete-all-orders'), { const res = await fetch(appUrl(`/api/settings/delete-all-orders`), {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ password: deletePassword }) body: JSON.stringify({ password: deletePassword })