development

Fetch GET 요청을 사용하여 쿼리 문자열 설정

big-blog 2020. 8. 28. 07:52
반응형

Fetch GET 요청을 사용하여 쿼리 문자열 설정


새로운 Fetch API를 사용하려고합니다 : https://developer.mozilla.org/en/docs/Web/API/Fetch_API

다음과 같은 GET 요청을하고 있습니다.

var request = new Request({
  url: 'http://myapi.com/orders',
  method: 'GET'
});
fetch(request);

그러나 GET 요청에 쿼리 문자열을 추가하는 방법을 잘 모르겠습니다. 이상적으로는 다음과 같은 URL에 GET 요청을 할 수 있기를 원합니다.

'http://myapi.com/orders?order_id=1'

jQuery에서는 매개 변수 로 전달 {order_id: 1}하여 이를 수행 할 수 있습니다. 새로운 Fetch API로이를 수행하는 동일한 방법이 있습니까?data$.ajax()


2017 년 3 월 업데이트 :

URL.searchParams 지원은 공식적으로 Chrome 51에 포함되었지만 다른 브라우저에는 여전히 polyfill이 필요합니다 .


쿼리 매개 변수를 사용 하는 공식적인 방법은 URL에 추가하는 것입니다. 에서 사양 ,이 예입니다 :

var url = new URL("https://geo.example.org/api"),
    params = {lat:35.696233, long:139.570431}
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]))
fetch(url).then(/* … */)

그러나 Chrome searchParams이 URL 속성 (작성 당시)을 지원하는지 확실하지 않으므로 타사 라이브러리 또는 자체 솔루션을 사용하는 것이 좋습니다 .

2018 년 4 월 업데이트 :

URLSearchParams 생성자사용 하면 2D 배열 또는 객체를 할당하고 url.search모든 키를 반복 하는 대신에 할당 하고 추가 할 수 있습니다.

var url = new URL('https://sl.se')

var params = {lat:35.696233, long:139.570431} // or:
var params = [['lat', '35.696233'], ['long', '139.570431']]

url.search = new URLSearchParams(params)

fetch(url)

참고 : URLSearchParamsNodeJS에서도 사용 가능

const { URL, URLSearchParams } = require('url');

이미 답변했듯이 이것은 fetch-API로는 아직 불가능한 사양 입니다. 그러나 나는 주목해야한다 :

당신이있는 경우 node는 거기에 querystring패키지로 제공된다. 객체 / 쿼리 문자열을 문자열 화 / 파싱 할 수 있습니다.

var querystring = require('querystring')
var data = { key: 'value' }
querystring.stringify(data) // => 'key=value'

... 그런 다음 URL에 추가하여 요청하십시오.


그러나 위의 문제는 항상 물음표 ( ?) 를 앞에 추가해야한다는 것 입니다. 따라서 다른 방법은 parsenodes url패키지 메서드 를 사용하고 다음과 같이 수행하는 것입니다.

var url = require('url')
var data = { key: 'value' }
url.format({ query: data }) // => '?key=value'

보기 queryhttps://nodejs.org/api/url.html#url_url_format_urlobj

이것은 내부적으로 다음과 같이 가능 합니다 .

search = obj.search || (
    obj.query && ('?' + (
        typeof(obj.query) === 'object' ?
        querystring.stringify(obj.query) :
        String(obj.query)
    ))
) || ''

let params = {
  "param1": "value1",
  "param2": "value2"
}

let query = Object.keys(params)
             .map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
             .join('&');

let url = 'https:example.com//xyz.com/search?' + query

fetch(url)
  .then(data => data.text())
  .then((text) => {
    console.log('request succeeded with JSON response', text)
  }).catch(function (error) {
    console.log('request failed', error)
  })

encodeQueryString — 객체를 쿼리 문자열 매개 변수로 인코딩

/**
 * Encode an object as url query string parameters
 * - includes the leading "?" prefix
 * - example input — {key: "value", alpha: "beta"}
 * - example output — output "?key=value&alpha=beta"
 * - returns empty string when given an empty object
 */
function encodeQueryString(params) {
    const keys = Object.keys(params)
    return keys.length
        ? "?" + keys
            .map(key => encodeURIComponent(key)
                + "=" + encodeURIComponent(params[key]))
            .join("&")
        : ""
}

encodeQueryString({key: "value", alpha: "beta"})
 //> "?key=value&alpha=beta"

쿼리 문자열#stringify 에서 사용할 수 있습니다.

import { stringify } from 'query-string';

fetch(`https://example.org?${stringify(params)}`)

아마도 이것이 더 낫습니다.

const withQuery = require('with-query');

fetch(withQuery('https://api.github.com/search/repositories', {
  q: 'query',
  sort: 'stars',
  order: 'asc',
}))
.then(res => res.json())
.then((json) => {
  console.info(json);
})
.catch((err) => {
  console.error(err);
});

나는 이것이 절대적으로 명백하다는 것을 알고 있지만, 가장 간단한 대답으로 이것을 추가 할 가치가 있다고 생각합니다.

var orderId = 1;
var request = new Request({
  url: 'http://myapi.com/orders?order_id=' + 1,
  method: 'GET'
});
fetch(request);

템플릿 리터럴도 여기서 유효한 옵션이며 몇 가지 이점을 제공합니다.

원시 문자열, 숫자, 부울 값 등을 포함 할 수 있습니다.

    let request = new Request(`https://example.com/?name=${'Patrick'}&number=${1}`);

변수를 포함 할 수 있습니다.

    let request = new Request(`https://example.com/?name=${nameParam}`);

You can include logic and functions:

    let request = new Request(`https://example.com/?name=${nameParam !== undefined ? nameParam : getDefaultName() }`);

As far as structuring the data of a larger query string, I like using an array concatenated to a string. I find it easier to understand than some of the other methods:

let queryString = [
  `param1=${getParam(1)}`,
  `param2=${getParam(2)}`,
  `param3=${getParam(3)}`,
].join('&');

let request = new Request(`https://example.com/?${queryString}`, {
  method: 'GET'
});

참고URL : https://stackoverflow.com/questions/35038857/setting-query-string-using-fetch-get-request

반응형