我正在使用fetch api来获取从github api返回的访问令牌。
当我查看网络标签时,我发现该标记已退回,但我无法在fetch
请求中访问该标记。
我的代码如下所示:
fetch(`https://github.com/login/oauth/access_token?client_id=***&client_secret=***&code=${code}&redirect_uri=http://localhost:3000/&state=react`, {
method: 'POST',
mode: 'no-cors',
headers: new Headers({
'Content-Type': 'application/json'
})
}).then(function(res) {
console.log(res); // I have already tried return res.json() here
})
如果我返回res.json()
:
index.js:30 Uncaught(在promise中)SyntaxError:意外的输入结束
GitHub docs表示响应采用以下格式:
默认情况下,响应采用以下形式:
access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&token_type=bearer
我想它不会返回有效的json而只是一个字符串,所以我不知道如何访问这个响应。
响应如下:
然而,当我尝试注销回复时,我得到SyntaxError: Unexpected end of input
答案 0 :(得分:1)
如果您使用mode: 'no-cors
,浏览器将限制访问正文。浏览器具有跨域安全性。如果您想访问正文,则必须在没有mode: 'no-cors
属性的情况下调用。
https://developer.mozilla.org/en-US/docs/Web/API/Request/mode
fetch(`https://jsonplaceholder.typicode.com/posts/1`, {
method: 'GET',
headers: new Headers({
'Content-Type': 'application/json'
})
})
.then(res => res.json())
.then(function(res) {
console.log(res);
})
fetch(`https://jsonplaceholder.typicode.com/posts/1`, {
method: 'GET',
mode: 'no-cors',
headers: new Headers({
'Content-Type': 'application/json'
})
})
.then(res => res.json())
.then(function(res) {
console.log(res);
})
答案 1 :(得分:0)
我想你差不多了。您已经向文档提到了this link。如果您进一步阅读,您可以看到要在JSON中获得响应,您需要包含名为Accept
的标头,其值为application/json
。
fetch(` ... `, {
method: 'POST',
mode: 'no-cors',
headers: new Headers({
'Content-Type': 'application/json',
'Accept': 'application/json'
})
}).then(function(res) {
...
})
这样,您可以在.json()
上应用res
。