使用rxjs ajax()我得到“您的浏览器不支持CORS”

Eva*_*oll 5 ajax node.js cors rxjs rxjs6

使用Rxjs 6我不断

错误:您的浏览器不支持CORS

我的代码很简单,

import { ajax } from 'rxjs/ajax';

const ajax$ = ajax({
  url: genURL_chan(179),
  crossDomain: true,
  withCredentials: false,
  method: 'POST',
  body: { 'since': 0, 'mode': 'Messages', 'msgCount': 5000},
});
Run Code Online (Sandbox Code Playgroud)

我的代码很简单,

/node_modules/rxjs/internal/util/hostReportError.js:4
    setTimeout(function () { throw err; });
                             ^

Error: CORS is not supported by your browser
    at getCORSRequest (/node_modules/rxjs/internal/observable/dom/AjaxObservable.js:27:15)
    at Object.createXHR (/node_modules/rxjs/internal/observable/dom/AjaxObservable.js:93:43)
    at Object.tryCatcher (/node_modules/rxjs/internal/util/tryCatch.js:7:31)
    at AjaxSubscriber.send (/node_modules/rxjs/internal/observable/dom/AjaxObservable.js:159:50)
    at new AjaxSubscriber (/node_modules/rxjs/internal/observable/dom/AjaxObservable.js:147:15)
    at AjaxObservable._subscribe (/node_modules/rxjs/internal/observable/dom/AjaxObservable.js:116:16)
    at AjaxObservable.Observable._trySubscribe (/node_modules/rxjs/internal/Observable.js:43:25)
    at AjaxObservable.Observable.subscribe (/node_modules/rxjs/internal/Observable.js:29:22)
    at Object.<anonymous> (/index.js:17:7)
    at Module._compile (internal/modules/cjs/loader.js:702:30)
Run Code Online (Sandbox Code Playgroud)

Eva*_*oll 8

出于某种原因,有一个从未真正修复过的错误。首先你必须安装xmlhttprequest

npm install xmlhttprequest;
Run Code Online (Sandbox Code Playgroud)

您必须稍微编辑一下并添加其中之一

## CommonJS
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

## ES2015
import { XMLHttpRequest } from 'xmlhttprequest';
Run Code Online (Sandbox Code Playgroud)

然后把这个放在电话里ajax()

createXHR: function () {
  return new XMLHttpRequest();
}
Run Code Online (Sandbox Code Playgroud)

应该是这个样子

import { ajax } from 'rxjs/ajax';
import { XMLHttpRequest } from 'xmlhttprequest';

const ajax$ = ajax({
  url: genURL_chan(179),
  crossDomain: true,
  withCredentials: false,
  method: 'POST',
  body: { 'since': 0, 'mode': 'Messages', 'msgCount': 5000},
});
Run Code Online (Sandbox Code Playgroud)

  • “createXHR”在哪里使用? (3认同)

Ben*_*esh 6

您需要将createXHR函数放在传递给ajax()调用的实际配置上:

import { XMLHttpRequest } from 'xmlhttprequest'

function createXHR() {
  return new XMLHttpRequest();
}

const ajax$ = ajax({
  createXHR, // <--- here
  url: genURL_chan(179),
  crossDomain: true,
  withCredentials: false,
  method: 'POST',
  body: { 'since': 0, 'mode': 'Messages', 'msgCount': 5000},
});
Run Code Online (Sandbox Code Playgroud)

相关:我也回答了您关于存储库的问题,提供了更多信息:https : //github.com/ReactiveX/rxjs/issues/3978#issuecomment-411472389