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)
참고 : URLSearchParams
NodeJS에서도 사용 가능
const { URL, URLSearchParams } = require('url');
이미 답변했듯이 이것은 fetch
-API로는 아직 불가능한 사양 입니다. 그러나 나는 주목해야한다 :
당신이있는 경우 node
는 거기에 querystring
패키지로 제공된다. 객체 / 쿼리 문자열을 문자열 화 / 파싱 할 수 있습니다.
var querystring = require('querystring')
var data = { key: 'value' }
querystring.stringify(data) // => 'key=value'
... 그런 다음 URL에 추가하여 요청하십시오.
그러나 위의 문제는 항상 물음표 ( ?
) 를 앞에 추가해야한다는 것 입니다. 따라서 다른 방법은 parse
nodes url
패키지 의 메서드 를 사용하고 다음과 같이 수행하는 것입니다.
var url = require('url')
var data = { key: 'value' }
url.format({ query: data }) // => '?key=value'
보기 query
에 https://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
'development' 카테고리의 다른 글
브라우저가 asp.net 응용 프로그램에서 최신 js 및 css 파일을 가져 오도록 강제 (0) | 2020.08.28 |
---|---|
java.lang.OutOfMemoryError 잡기? (0) | 2020.08.28 |
HTTP 414 "요청 URI가 너무 김"오류를 해결하려면 어떻게합니까? (0) | 2020.08.28 |
실행하지 않고 SBT로 테스트를 컴파일하는 방법 (0) | 2020.08.28 |
파이썬 파일에서 문자 읽기 (0) | 2020.08.28 |