공유해 주셔서 감사합니다! 이제 경고 메시지가 없이 잘 작동합니다.
여기서 언급했던 다른 문제가 하나 더 있습니다:
이 문제에 대해 ChatGPT에게 물어보았는데 (저는 개발자가 아니므로) 다음과 같이 답변했습니다:
ChatGPT 메시지 보기
이 문제는 URL에서 topicId를 추출하는 방식에서 비롯된 것일 가능성이 높습니다:
const topicId = url.split('/')[2];
URL에 더 복잡한 패턴(공백, 특수 문자, 비표준 슬러그가 포함된 제목 등)이 포함된 경우, 이 단순한 split 메서드는 올바른 토픽 ID를 신뢰할 수 있게 가져올 수 없습니다.
왜 문제가 되는가:
/t/3ple-2015-2019-title/12345와 같은 URL은 숫자 토픽 ID가 마지막에 위치하지만, 현재 코드는 토픽 ID가 항상 세 번째 세그먼트라고 가정하고 있습니다.- URL 구조가 다양하다면, ID 대신 슬러그나 제목의 일부가 추출될 수 있습니다.
- 이로 인해 AJAX 요청(
/t/${topicId}.json)이 무효한 토픽 ID나 슬러그를 전송하게 되어 잘못된 정보나 기본 카테고리 정보(예: “General”)가 반환됩니다.
해결 방법:
URL에서 토픽 ID를 더 신뢰할 수 있는 방식으로 추출하세요:
- URL의 마지막 숫자 세그먼트에서 토픽 ID를 추출합니다.
Discourse 토픽 URL은 보통 /t/{slug}/{id} 형태를 띱니다. 예를 들어:
/t/3ple-2015-2019-title/12345
여기서 12345가 토픽 ID입니다.
다음 코드를:
const topicId = url.split('/')[2];
이렇게 교체하세요:
const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1]; // 마지막 세그먼트, 숫자 ID로 예상
더 안전하도록 topicId가 숫자인지 검증하세요:
if (!/^\d+$/.test(topicId)) {
console.error("URL에서 추출한 잘못된 토픽 ID:", topicId);
return; // 실행 중지
}
요약: updateBreadcrumbs의 코드 스니펫을 다음과 같이 업데이트하세요:
if (url.includes('/t/')) {
const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1];
if (!/^\d+$/.test(topicId)) {
console.error("URL에서 추출한 잘못된 토픽 ID:", topicId);
return;
}
// 이제 topicId를 사용하여 AJAX 호출을 계속 진행
}
이렇게 하면 URL에 복잡한 제목이나 공백이 포함되어 있더라도 항상 숫자 토픽 ID를 가져올 수 있으며, 브레드크럼 카테고리 및 경로 조회 문제를 해결할 수 있습니다.
이 문제를 수정해 주실 수 있을까요?
미리 감사드립니다 ![]()