> 웹 프론트엔드 > JS 튜토리얼 > JavaScript에서 URL 작업

JavaScript에서 URL 작업

DDD
풀어 주다: 2024-12-30 10:11:10
원래의
821명이 탐색했습니다.

Working with URLs in JavaScript

작사: Joe Attardi✏️

URL은 모든 웹 앱에서 중요한 부분입니다. 앱이 API에 요청하는 경우 이러한 요청에 대한 올바른 URL을 만드는 것이 중요합니다. 모든 최신 브라우저에서 지원되는 URL API는 URL을 구문 분석하고 조작하는 방법을 제공합니다. URL의 다양한 부분에 쉽게 액세스할 수 있습니다.

URL 부분 이해

다음 URL을 고려해보세요.

https://example.com/api/search?query=foo&sort=asc#results

이 URL은 다음 구성 요소로 구성됩니다.

  • 프로토콜: https
  • 호스트: example.com
  • 경로명 : /api/search
  • 쿼리 문자열: ?query=foo&sort=asc
  • 해시: #results

최신 JavaScript를 사용하면 URL을 구문 분석하고 필요에 따라 이러한 다양한 부분을 추출할 수 있습니다.

URL 구문 분석

URL API가 제공되기 전에는 이전 브라우저에서 개발자가 URL을 구문 분석하는 한 가지 방법은 요소. 이 요소는 몇 가지 기본적인 URL 구문 분석을 제공합니다. 예를 들어, URL에서 쿼리 문자열을 추출할 수 있는 방법은 다음과 같습니다.

function getQueryString(url) {
  const link = document.createElement('a');
  link.href = url;
  return url.search;
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

그러나 이 접근 방식에는 몇 가지 단점이 있습니다.

  • DOM 환경이 필요하므로 Node.js와 같은 환경에서는 작동하지 않습니다
  • 또한 오류 처리 기능이 없습니다. 잘못된 URL이 href 속성에 전달되어도 오류가 발생하지 않습니다

정규 표현식을 사용하여 URL의 다양한 부분을 구문 분석할 수도 있지만 이는 지루하고 오류가 발생하기 쉽습니다.

URL API를 사용하여 URL을 구문 분석하는 것은 간단합니다. 구문 분석하려는 URL을 URL 생성자에 전달하기만 하면 됩니다. URL 문자열이 유효하면 URL의 다양한 부분에 대한 속성이 포함된 URL 개체를 다시 받게 됩니다.

const url = new URL('https://example.com/api/search?query=foobar');
console.log(url.host); // example.com
console.log(url.pathname); // /api/search
console.log(url.search); // ?query=foobar
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

쿼리 문자열 구문 분석

다음 두 가지 방법으로 URL의 쿼리 문자열에 액세스할 수 있습니다.

  • 전체 쿼리 문자열(? 문자 포함)을 포함하는 문자열인 검색 속성
  • URLSearchParams 객체인 searchParams 속성

쿼리 문자열의 특정 매개변수 값에 관심이 있는 경우 해당 get 메소드를 사용하여 해당 이름으로 매개변수를 가져올 수 있습니다.

const url = new URL('https://example.com/api/search?query=foobar&maxResults=10');
console.log(url.searchParams.get('query'); // foobar
console.log(url.searchParams.get('maxResults'); // 10
로그인 후 복사
로그인 후 복사
로그인 후 복사

동일한 이름을 가진 매개변수가 여러 개 있는 경우 getAll을 사용하여 해당 이름에 대한 모든 값을 포함하는 배열을 가져올 수 있습니다.

const url = new URL('https://example.com/api/search?tag=tag1&tag=tag2&tag=tag3');
console.log(url.searchParams.getAll('tag')); // ['tag1', 'tag2', 'tag3']
로그인 후 복사
로그인 후 복사
로그인 후 복사

쿼리 문자열 작성

쿼리 문자열을 직접 작성하는 것은 까다로울 수 있으며, 특히 쿼리 매개변수에 이스케이프해야 하는 특수 문자가 포함되어 있는 경우 더욱 그렇습니다. 예를 들어 쿼리 매개변수에 & 문자가 포함되어야 하는 경우 이를 &로 인코딩해야 합니다. 이러한 상황을 처리하려면 encodeURIComponent 함수를 사용해야 합니다.

function getQueryString(url) {
  const link = document.createElement('a');
  link.href = url;
  return url.search;
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

URLSearchParams 개체를 사용하면 쿼리 문자열을 더욱 안전하게 작성할 수 있습니다.

const url = new URL('https://example.com/api/search?query=foobar');
console.log(url.host); // example.com
console.log(url.pathname); // /api/search
console.log(url.search); // ?query=foobar
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

URLSearchParams 사용의 장점은 다음과 같습니다.

  • 매개변수를 구분하는 & 문자에 대해 걱정할 필요가 없습니다
  • 매개변수 값을 URI 인코딩할 필요가 없습니다
  • 문자열 연결을 사용할 필요가 없습니다

쿼리 매개변수 반복

URLSearchParams 개체가 없으면 쿼리 문자열의 매개변수를 반복하는 것이 약간 까다롭습니다. 문자열을 여러 번 분할해야 합니다. 먼저 키/값 쌍 그룹으로 분할한 다음 다시 키와 값을 분할해야 합니다.

const url = new URL('https://example.com/api/search?query=foobar&maxResults=10');
console.log(url.searchParams.get('query'); // foobar
console.log(url.searchParams.get('maxResults'); // 10
로그인 후 복사
로그인 후 복사
로그인 후 복사

매개변수에 인코딩된 문자가 포함될 수 있는 경우 이를 디코딩해야 합니다.

const url = new URL('https://example.com/api/search?tag=tag1&tag=tag2&tag=tag3');
console.log(url.searchParams.getAll('tag')); // ['tag1', 'tag2', 'tag3']
로그인 후 복사
로그인 후 복사
로그인 후 복사

대신 URLSearchParams의 항목 메소드를 사용하여 키/값 쌍을 반복할 수 있습니다.

let queryString = 'foo=bar';
queryString += '&baz=qux';
queryString += '&tag=' + encodeURIComponent('one&two');
console.log(queryString); // foo=bar&baz=qux&tag=one%26two
로그인 후 복사
로그인 후 복사

전체 URL 구축

다음은 기본 URL과 일부 쿼리 매개변수를 사용하여 URL을 구축하는 전체 예입니다.

const params = new URLSearchParams();
params.append('foo', 'bar');
params.append('baz', 'qux');
params.append('tag', 'one&two');
console.log(params.toString()); // foo=bar&baz=qux&tag=one%26two
로그인 후 복사

유효한 URL 확인 중

정규식을 사용하여 URL의 유효성을 검사할 수도 있지만 유효한 URL 문자열을 완전히 캡처하는 정규식을 만드는 것은 매우 어렵습니다.

대신 URL API에 접근할 수 있습니다. URL 생성자에 잘못된 URL을 제공하면 오류가 발생합니다. 이를 사용하여 URL이 유효한지 확인할 수 있습니다.

function listQueryParams(queryString) {
  queryString.split('&').forEach(param => {
    const [key, value] = param.split('=');
    console.log(`${key}: ${value}`);
  });
}
로그인 후 복사

최신 브라우저를 사용하면 이 작업이 더욱 쉬워집니다. 한 줄의 코드로 유사한 유효성 검사를 수행하는 최신 URL.canParse 정적 메서드가 있습니다. 위의 isValidURL 함수와 마찬가지로 잠재적인 URL 문자열을 사용하고 URL 문자열의 유효성에 따라 true 또는 false를 반환합니다.

상대 URL 만들기

URL API에는 상대 URL을 확인하는 강력한 메커니즘이 있습니다. 일반적으로 URL 생성자에 대한 인수는 완전하고 유효한 URL이 아닌 경우 오류를 발생시킵니다. 그러나 상대 URL을 작성하기 위한 기반으로 사용되는 두 번째 인수를 지정할 수 있습니다. 두 인수 접근 방식을 사용하는 경우 첫 번째 인수는 유효한 URL일 필요는 없지만 두 번째 인수는 유효합니다.

먼저 간단한 사례를 살펴보겠습니다.

function listQueryParams(queryString) {
  queryString.split('&').forEach(param => {
    const [key, value] = param.split('=');
    console.log(`${key}: ${decodeURIComponent(value)}`);
  });
}
로그인 후 복사

URL 생성자는 https://example.com의 기본 URL을 사용하고 상대 경로 /about을 추가하여 https://example.com/about을 생성합니다.

이것은 어떻습니까:

function listQueryParams(queryString) {
  const params = new URLSearchParams(queryString);
  params.entries().forEach(([key, value]) => console.log(`${key}: ${value}`));
}
로그인 후 복사

https://example.com/users/profile이라고 예상할 수도 있지만 실제로는 https://example.com/profile로 나옵니다. 이는 상대 링크처럼 동작합니다. example.com의 루트인 상위 경로 세그먼트를 가져온 다음 프로필을 추가합니다.

상대 URL을 사용하는 예를 하나 더 살펴보겠습니다. ..를 사용하여 경로 계층 구조를 다시 돌아갈 수도 있습니다:

function getQueryString(url) {
  const link = document.createElement('a');
  link.href = url;
  return url.search;
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

https://example.com/profile에 나오는 내용입니다. 상대 URL은 상위 경로 세그먼트에서 시작된다는 점을 기억하세요. 그런 다음 여기에는 ..이 포함되어 하나 이상의 경로 세그먼트로 올라갑니다.

상대 URL로 URL 생성자를 호출하고 기본 URL에 유효하지 않거나 불완전한 URL을 지정하면 오류가 발생합니다. 전체 기본 URL 없이 상대 URL을 사용하는 경우에도 오류가 발생합니다.

const url = new URL('https://example.com/api/search?query=foobar');
console.log(url.host); // example.com
console.log(url.pathname); // /api/search
console.log(url.search); // ?query=foobar
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

window.location 개체 작업

현재 페이지의 URL을 나타내는 window.location 개체에 대해 잘 알고 계실 것입니다. 이 객체에는 href 및 pathname과 같은 속성도 있으므로 URL 객체라고 생각할 수 있습니다. 이는 URL과 공통된 일부 속성이 있지만 일부(예: searchParams 속성)가 누락된 다른 객체인 Location입니다.

URL 개체가 아니더라도 window.location을 사용하여 새 URL 개체를 구성할 수 있습니다. window.location을 URL 생성자에 전달하여 현재 URL을 기반으로 searchParams 및 모든 기능을 갖춘 새로운 완전한 URL을 생성하거나 상대 URL을 생성할 때 이를 기본 URL로 사용할 수도 있습니다.

const url = new URL('https://example.com/api/search?query=foobar&maxResults=10');
console.log(url.searchParams.get('query'); // foobar
console.log(url.searchParams.get('maxResults'); // 10
로그인 후 복사
로그인 후 복사
로그인 후 복사

URLPattern을 사용하여 URL 내의 패턴 일치

URL을 사용하면 URL에서 경로를 쉽게 얻을 수 있습니다. 예를 들어 URL https://example.com/api/users/123/profile에서 경로 이름은 /api/users/123/profile입니다. 이 URL에서 사용자 ID인 123만 가져오려면 어떻게 해야 합니까?

앞서 논의한 것처럼 URL의 일부를 검증하고 추출하기 위해 적절한 정규식을 만드는 것이 어려울 수 있습니다.

아직 모든 브라우저에서 사용할 수는 없지만 URLPattern API를 사용하면 지정한 패턴과 일치하는 URL의 일부를 일치시키고 추출할 수 있습니다. 이는 단일 페이지 애플리케이션(SPA)의 클라이언트 측 라우팅과 같은 작업에 특히 유용할 수 있습니다.

사용자 프로필 URL을 예로 들어 사용자 ID를 가져오는 URLPattern을 생성해 보겠습니다. 앞에 : 문자를 사용하여 명명된 자리 표시자를 나타낼 수 있습니다. 이는 나중에 URL의 해당 부분과 일치시키는 데 사용할 수 있습니다.

const url = new URL('https://example.com/api/search?tag=tag1&tag=tag2&tag=tag3');
console.log(url.searchParams.getAll('tag')); // ['tag1', 'tag2', 'tag3']
로그인 후 복사
로그인 후 복사
로그인 후 복사

URLPattern에서 exec를 호출하려면 유효한 URL이 필요합니다. URL의 각 부분(프로토콜, 호스트, 경로 이름 등)에 대한 속성을 포함하는 매처 객체를 반환합니다. 이러한 각 속성에는 :userId와 같은 자리 표시자 이름을 URL 내의 해당 값에 매핑하는 그룹 속성도 있습니다.

여기에서 수행한 것처럼 경로 이름과 같은 URL의 한 부분만 일치시키는 데만 관심이 있는 경우 URL 패턴에 와일드카드를 지정할 수도 있습니다. 또는 URL 문자열 대신 일치하려는 URL 부분이 포함된 객체를 전달할 수 있습니다.

let queryString = 'foo=bar';
queryString += '&baz=qux';
queryString += '&tag=' + encodeURIComponent('one&two');
console.log(queryString); // foo=bar&baz=qux&tag=one%26two
로그인 후 복사
로그인 후 복사

URLPattern API는 아직 모든 브라우저에서 사용할 수 없습니다. 글을 쓰는 시점에서는 아직 Firefox나 Safari에서 지원되지 않습니다. CanIUse.com에서 최신 브라우저 지원 정보를 확인할 수 있습니다.

요약

URL API는 JavaScript에서 URL을 구성, 검증 및 조작하기 위한 다목적 인터페이스입니다. 수동 구문 분석이나 정규 표현식보다 사용하는 것이 더 안전하고 오류가 발생할 가능성이 적습니다. URLSearchParams 개체를 사용하면 문자열 연결이나 특수 문자 인코딩에 대한 걱정 없이 쿼리 문자열을 작성할 수 있습니다.

URLPattern API는 이를 한 단계 더 발전시켜 와일드카드와 이름이 지정된 자리 표시자를 지원하므로 앱의 요구 사항에 맞게 URL을 분할하고 분류할 수 있습니다! 추가 자료:

  • URL 인터페이스(MDN)
  • URLPattern API(MDN)

몇 분 안에 LogRocket의 최신 오류 추적을 설정하세요.

  1. https://logrocket.com/signup/을 방문하여 앱 ID를 받으세요.
  2. NPM 또는 스크립트 태그를 통해 LogRocket을 설치합니다. LogRocket.init()는 서버측이 아닌 클라이언트측에서 호출해야 합니다.

NPM:

function getQueryString(url) {
  const link = document.createElement('a');
  link.href = url;
  return url.search;
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

스크립트 태그:

const url = new URL('https://example.com/api/search?query=foobar');
console.log(url.host); // example.com
console.log(url.pathname); // /api/search
console.log(url.search); // ?query=foobar
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

3.(선택 사항) 스택과의 심층 통합을 위해 플러그인을 설치합니다.

  • Redux 미들웨어
  • ngrx 미들웨어
  • Vuex 플러그인

지금 시작하세요

위 내용은 JavaScript에서 URL 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿