标签: fetch-api

响应状态= 0使用fetch polyfill with mode:'no-cors'

我正在使用fetch polyfill和'no-cors'模式并获得响应状态0.在开发人员工具中,我可以看到响应具有所请求的数据.

客户端代码:

const BASE_CONFIG = {
    credentials: 'include',
    mode: 'no-cors'
};

let checkStatus = (response) => {
    if (response.status >= 200 && response.status < 300) {
        return response;
    } else {
        var error = new Error(response.statusText);
        error.response = response;
        throw error;
    }
};

function GET(url, urlParams={}, config={}) {
    let requestConfig = {
        method: 'get'
    };
  
    Object.assign(requestConfig, BASE_CONFIG, config);
    return fetch(url, requestConfig)
            .then(checkStatus)
            .then(parseJSON);
}

GET('http://other.domain,{})
Run Code Online (Sandbox Code Playgroud)

Beckend nodejs(Express.js)简化的响应处理程序:

function getData(req, res) {
    var responseData = {data: 'test'};
    res.header("Access-Control-Allow-Origin", "*"); …
Run Code Online (Sandbox Code Playgroud)

javascript get http fetch-api

8
推荐指数
1
解决办法
4095
查看次数

使用fetch和ES6承诺处理自定义错误的最简洁方法

我正在尝试使用fetch和ES6 promises智能地处理来自API的成功/错误响应.

以下是我需要处理响应状态的方法:

204: has no json response, but need to treat as success
406: should redirect to sign in
422: has json for error message
< 400 (but not 204): success, will have json
>= 400 (but not 422): error, will not have json
Run Code Online (Sandbox Code Playgroud)

所以,我正在努力学习如何干净利落地写这个.

我现在有一些不太常用的代码,看起来像这样:

fetch()
  .then(response => checkStatus(response))
  .then(parseJSON)                           //will throw for the 204
  .then(data => notify('success', someMsg))
  .catch(error => checkErrorStatus(error))
  .then(parseJSON)
  .then(data => notify('error', dataForMsg)
  .catch(error => notify('error', someGenericErrorMsg)
Run Code Online (Sandbox Code Playgroud)

但是使用catch两次似乎很奇怪,我还不知道如何处理204.

另外,只是澄清checkStatuscheckErrorStatus做类似的事情:

export …
Run Code Online (Sandbox Code Playgroud)

javascript promise ecmascript-6 es6-promise fetch-api

8
推荐指数
1
解决办法
5083
查看次数

使用Fetch API重定向响应获取位置片段

我正在尝试获取fetch API请求的重定向响应位置片段.但如果可能的话,我无法想象如何访问它.

上下文是我在隐式流中执行OpenID Connect请求,用于WebRTC Identity Proxy断言生成.OIDC规范将请求的答案定义为:

使用Implicit Flow时,所有响应参数都将添加到重定向URI的片段组件中

HTTP/1.1 302找到位置:https ://client.example.org/cb# access_token = SlAV32hkKG ...

所以我在手动模式下设置了获取请求.但响应是一个不透明的重定向过滤响应,它隐藏了位置标题.(https://fetch.spec.whatwg.org/#concept-filtered-response-opaque-redirect)

其他获取模式是错误,其后无效.虽然XHR会自动跟随重定向,但也无济于事.我可能会从fetch API中遗漏一些东西,但它似乎是故意隐藏的东西.

有人能给我一种方法来访问这些信息(或确认这是不可能的)?

是否有替代fetch和XHR来发出此请求,这将允许访问重定向位置标头?

redirect oauth-2.0 webrtc openid-connect fetch-api

8
推荐指数
1
解决办法
1682
查看次数

PolyDeill for TextDecoder

我正在使用fetch并将whatwg-fetchpolyfill包含在我的应用程序中.

我也TextDecoder按照Jake Archibald的博客中描述的那样使用了!解码响应,但我不确定使用什么polyfill.

(目前Safari抱怨ReferenceError: Can't find variable: TextDecoder)

我猜有一个polyfill TextDecoder,但我找不到它......

javascript polyfills fetch-api

8
推荐指数
3
解决办法
7757
查看次数

使用自定义标头ReactJS获取GET请求

我正在尝试向API发送GET请求,但是当我在代码中添加自定义标头时,会发生奇怪的事情.某处,请求方法在到达Web服务器时更改为OPTIONS.

但是当我在没有标题的情况下执行相同操作时,它将是GET类型.当我使用应用程序postman(API开发工具)时,请求工作正常!

请求代码:

    let token = this.generateClientToken(privateKey, message);

    let myheaders = {
      "appID": appID,
      "authorizationkey": token
    }

    fetch('http://localhost:8080/api/app/postman', {
      method: "GET",
      // body: JSON.stringify(''),
      headers: myheaders
    }).then(function(response) {
      console.log(response.status);     //=> number 100–599
      console.log(response.statusText); //=> String
      console.log(response.headers);    //=> Headers
      console.log(response.url);        //=> String

      return response.text()
    }, function(error) {
      console.log(error.message); //=> String
    })
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

服务器日志输出(带标头):

worker_1  | 172.18.0.4 -  17/Mar/2017:15:47:44 +0000 "OPTIONS /index.php" 403
web_1     | 172.18.0.1 - - [17/Mar/2017:15:47:44 +0000] "OPTIONS /api/app/postman HTTP/1.1" 403 5 "-" "Mozilla/5.0 (Macintosh; Intel …
Run Code Online (Sandbox Code Playgroud)

javascript node.js cors reactjs fetch-api

8
推荐指数
2
解决办法
1万
查看次数

您可以使用fetch API设置Host头

我有一个反向代理服务器,它根据主机头重定向到不同的服务.但是,使用浏览器向此服务器发出请求时,Host始终将其设置为URL中的域名.我试过了:

fetch("http://foo.com", {"headers":{"Host":"bar.foo.com"}})
Run Code Online (Sandbox Code Playgroud)

但它不起作用

javascript fetch-api

8
推荐指数
1
解决办法
3322
查看次数

如何使用fetch返回promise回调的返回值?

我有点难过.我忘记了怎么做.我有一个名为ext.get()的函数,它接受url的参数.它从网址获取响应.ext.get()函数用于将响应作为json返回.我不认为这样做.

ext.get = (url) => {
        let myHeaders = new Headers();

        let options = {
            method: 'GET',
            headers: myHeaders,
            mode: 'cors'
        };

        //fetch get

        fetch(url, options).then(response => {
            console.log(JSON.stringify(response.json()))
            return JSON.stringify(response.json())

        });

    };
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 fetch-api

8
推荐指数
2
解决办法
2万
查看次数

无法使用fetch api发送DELETE请求

当我向某个端点发送删除请求时,例如使用来自终端的httpie

http delete http://localhost:8181/admin/applications/uspecs

我得到了一个有效的行为,就像在{ success: true }响应体中一样.但是,当我这样做

fetch (
  'http://localhost:8181/admin/applications/uspecs',
  { method: 'DELETE' }
)
.then(res => doSomethingWithResponse())
.catch(err => console.error(err))
Run Code Online (Sandbox Code Playgroud)

在javascript代码中,然后我得到了一个

Fetch API cannot load http://localhost:8181/admin/applications/uspecs.
Method DELETE is not allowed by Access-Control-Allow-Methods in preflight response.
Run Code Online (Sandbox Code Playgroud)

控制台上的错误.我错过了什么?我在选项请求上获得了有效的方法列表.

javascript fetch-api

7
推荐指数
1
解决办法
6440
查看次数

JS Fetch API禁用SSL证书

我使用Fetch API来获取URL的内容.对于我的内部开发,我试图连接到开发服务器,我收到一个错误.

此服务器的证书无效.您可能连接到假装为"xxx.com"的服务器,这可能会使您的机密信息面临风险.

如何为内部用途禁用SSL /证书检查?或者我有一个xxx.crt文件,如何安装或传递它以获得成功响应.

javascript certificate fetch-api

7
推荐指数
1
解决办法
1599
查看次数

使用Jest模拟请求报头模块

function createRequest(method) {
     const init = {
         method,
         headers: new Headers({.....}),
     };

    return new Request(url, init); }
Run Code Online (Sandbox Code Playgroud)

我在上面的代码(https://davidwalsh.name/fetch)中使用Request标头(带有Fetch )

但是,在使用Jest编写单元测试用例时,它给了我这个错误:ReferenceError:Headers未定义

我是否需要模拟这些标准模块?如何在单元测试用例中导入标题

javascript request-headers jestjs fetch-api es6-modules

7
推荐指数
1
解决办法
3983
查看次数