2017-04-25 14 views
0

角度2では、原点誤差が発生します。私は角2:原点間誤差

を私はブラウザでXMLファイルのリンクを開くと、それが完全に開くと、この問題を解決することはできない角度CLIに

を使用しますが、私はサービスで同じにアクセスしようとすると、それは私にエラーを与えるNGを通じてプロジェクトを提供し実行していますあなたの問題に

// data service file 
 

 
import { Injectable } from '@angular/core'; 
 
import { Http, Response, Headers } from '@angular/http'; 
 
import { Observable } from 'rxjs'; 
 
import 'rxjs/operator/map'; 
 
import 'rxjs/operator/catch'; 
 
import 'rxjs/observable/throw'; 
 
import { xml2js } from 'xml2js'; 
 

 
@Injectable() 
 
export class DataService { 
 
//parser = new xml2js.Parser({explicitArray : false}); 
 
    constructor(private http: Http) { } 
 

 
    getLoginData(){ 
 
    return this.http.get('https://api.myjson.com/bins/zsjzj') 
 
     .map((data:Response) => data.json()) 
 
     .catch(this.getError); 
 
    } 
 

 
/* getXML(){ 
 
    return this.http.get('http://www.xmlfiles.com/examples/note.xml') 
 
       .flatMap(res=>{ 
 
         return Observable.fromPromise(this.getJSON(res.text())) 
 
       }) 
 
       .catch((error:any) => Observable.throw(error.json().error || 'Server error')); 
 
    }*/ 
 
createAuthorizationHeader(headers:Headers) { 
 
    headers.append('Authorization', 'Basic ' + 
 
     btoa('a20e6aca-ee83-44bc-8033-b41f3078c2b6:c199f9c8-0548-4be7-9655-7ef7d7bf9d20')); 
 
    } 
 

 
    xml2json(xml, tab) { 
 
    var X = { 
 
     toObj: function(xml) { 
 
     var o = {}; 
 
     if (xml.nodeType==1) { // element node .. 
 
      if (xml.attributes.length) // element with attributes .. 
 
       for (var i=0; i<xml.attributes.length; i++) 
 
        o["@"+xml.attributes[i].nodeName] = (xml.attributes[i].nodeValue||"").toString(); 
 
      if (xml.firstChild) { // element has child nodes .. 
 
       var textChild=0, cdataChild=0, hasElementChild=false; 
 
       for (var n=xml.firstChild; n; n=n.nextSibling) { 
 
        if (n.nodeType==1) hasElementChild = true; 
 
        else if (n.nodeType==3 && n.nodeValue.match(/[^ \f\n\r\t\v]/)) textChild++; // non-whitespace text 
 
        else if (n.nodeType==4) cdataChild++; // cdata section node 
 
       } 
 
       if (hasElementChild) { 
 
        if (textChild < 2 && cdataChild < 2) { // structured element with evtl. a single text or/and cdata node .. 
 
        X.removeWhite(xml); 
 
        for (var n=xml.firstChild; n; n=n.nextSibling) { 
 
         if (n.nodeType == 3) // text node 
 
          o["#text"] = X.escape(n.nodeValue); 
 
         else if (n.nodeType == 4) // cdata node 
 
          o["#cdata"] = X.escape(n.nodeValue); 
 
         else if (o[n.nodeName]) { // multiple occurence of element .. 
 
          if (o[n.nodeName] instanceof Array) 
 
           o[n.nodeName][o[n.nodeName].length] = X.toObj(n); 
 
          else 
 
           o[n.nodeName] = [o[n.nodeName], X.toObj(n)]; 
 
         } 
 
         else // first occurence of element.. 
 
          o[n.nodeName] = X.toObj(n); 
 
        } 
 
        } 
 
        else { // mixed content 
 
        if (!xml.attributes.length) 
 
         o = X.escape(X.innerXml(xml)); 
 
        else 
 
         o["#text"] = X.escape(X.innerXml(xml)); 
 
        } 
 
       } 
 
       else if (textChild) { // pure text 
 
        if (!xml.attributes.length) 
 
        o = X.escape(X.innerXml(xml)); 
 
        else 
 
        o["#text"] = X.escape(X.innerXml(xml)); 
 
       } 
 
       else if (cdataChild) { // cdata 
 
        if (cdataChild > 1) 
 
        o = X.escape(X.innerXml(xml)); 
 
        else 
 
        for (var n=xml.firstChild; n; n=n.nextSibling) 
 
         o["#cdata"] = X.escape(n.nodeValue); 
 
       } 
 
      } 
 
      if (!xml.attributes.length && !xml.firstChild) o = null; 
 
     } 
 
     else if (xml.nodeType==9) { // document.node 
 
      o = X.toObj(xml.documentElement); 
 
     } 
 
     else 
 
      alert("unhandled node type: " + xml.nodeType); 
 
     return o; 
 
     }, 
 
     toJson: function(o, name, ind) { 
 
     var json = name ? ("\""+name+"\"") : ""; 
 
     if (o instanceof Array) { 
 
      for (var i=0,n=o.length; i<n; i++) 
 
       o[i] = X.toJson(o[i], "", ind+"\t"); 
 
      json += (name?":[":"[") + (o.length > 1 ? ("\n"+ind+"\t"+o.join(",\n"+ind+"\t")+"\n"+ind) : o.join("")) + "]"; 
 
     } 
 
     else if (o == null) 
 
      json += (name&&":") + "null"; 
 
     else if (typeof(o) == "object") { 
 
      var arr = []; 
 
      for (var m in o) 
 
       arr[arr.length] = X.toJson(o[m], m, ind+"\t"); 
 
      json += (name?":{":"{") + (arr.length > 1 ? ("\n"+ind+"\t"+arr.join(",\n"+ind+"\t")+"\n"+ind) : arr.join("")) + "}"; 
 
     } 
 
     else if (typeof(o) == "string") 
 
      json += (name&&":") + "\"" + o.toString() + "\""; 
 
     else 
 
      json += (name&&":") + o.toString(); 
 
     return json; 
 
     }, 
 
     innerXml: function(node) { 
 
     var s = "" 
 
     if ("innerHTML" in node) 
 
      s = node.innerHTML; 
 
     else { 
 
      var asXml = function(n) { 
 
       var s = ""; 
 
       if (n.nodeType == 1) { 
 
        s += "<" + n.nodeName; 
 
        for (var i=0; i<n.attributes.length;i++) 
 
        s += " " + n.attributes[i].nodeName + "=\"" + (n.attributes[i].nodeValue||"").toString() + "\""; 
 
        if (n.firstChild) { 
 
        s += ">"; 
 
        for (var c=n.firstChild; c; c=c.nextSibling) 
 
         s += asXml(c); 
 
        s += "</"+n.nodeName+">"; 
 
        } 
 
        else 
 
        s += "/>"; 
 
       } 
 
       else if (n.nodeType == 3) 
 
        s += n.nodeValue; 
 
       else if (n.nodeType == 4) 
 
        s += "<![CDATA[" + n.nodeValue + "]]>"; 
 
       return s; 
 
      }; 
 
      for (var c=node.firstChild; c; c=c.nextSibling) 
 
       s += asXml(c); 
 
     } 
 
     return s; 
 
     }, 
 
     escape: function(txt) { 
 
     return txt.replace(/[\\]/g, "\\\\") 
 
        .replace(/[\"]/g, '\\"') 
 
        .replace(/[\n]/g, '\\n') 
 
        .replace(/[\r]/g, '\\r'); 
 
     }, 
 
     removeWhite: function(e) { 
 
     e.normalize(); 
 
     for (var n = e.firstChild; n;) { 
 
      if (n.nodeType == 3) { // text node 
 
       if (!n.nodeValue.match(/[^ \f\n\r\t\v]/)) { // pure whitespace text node 
 
        var nxt = n.nextSibling; 
 
        e.removeChild(n); 
 
        n = nxt; 
 
       } 
 
       else 
 
        n = n.nextSibling; 
 
      } 
 
      else if (n.nodeType == 1) { // element node 
 
       X.removeWhite(n); 
 
       n = n.nextSibling; 
 
      } 
 
      else      // any other node 
 
       n = n.nextSibling; 
 
     } 
 
     return e; 
 
     } 
 
    }; 
 
    if (xml.nodeType == 9) // document node 
 
     xml = xml.documentElement; 
 
    var json = X.toJson(X.toObj(X.removeWhite(xml)), xml.nodeName, "\t"); 
 
    return "{\n" + tab + (tab ? json.replace(/\t/g, tab) : json.replace(/\t|\n/g, "")) + "\n}"; 
 
} 
 

 
getCompanies() { 
 
    \t var headers = new Headers(); 
 
    \t this.createAuthorizationHeader(headers); 
 
    \t headers.append('Accept', 'application/xml'); 
 

 
    \t return this.http.get('https://angular2.apispark.net/v1/companies/', { 
 
     headers: headers 
 
    }).map(res => JSON.parse(this.xml2json(res.text(),' '))); 
 
    } 
 

 
    private getError(error: Response):Observable<String>{ 
 
     return Observable.throw(error.json() || 'Server Issue'); 
 
    } 
 

 

 
}
//error 
 

 
OPTIONS http://172.21.103.105:15871/cgi-bin/blockpage.cgi?ws-session=2053590089 404 (Not Found) 
 
:4200/login:1 XMLHttpRequest cannot load http://172.21.103.105:15871/cgi-bin/blockpage.cgi?ws-session=2053590089. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 404. 
 
core.es5.js:1085 ERROR Response {_body: ProgressEvent, status: 0, ok: false, statusText: "", headers: Headers…} 
 
defaultErrorLogger @ core.es5.js:1085 
 
ErrorHandler.handleError @ core.es5.js:1145 
 
next @ core.es5.js:4774 
 
schedulerFn @ core.es5.js:3848 
 
SafeSubscriber.__tryOrUnsub @ Subscriber.js:234 
 
SafeSubscriber.next @ Subscriber.js:183 
 
Subscriber._next @ Subscriber.js:125 
 
Subscriber.next @ Subscriber.js:89 
 
Subject.next @ Subject.js:55 
 
EventEmitter.emit @ core.es5.js:3834 
 
NgZone.triggerError @ core.es5.js:4205 
 
onHandleError @ core.es5.js:4166 
 
webpackJsonp.579.ZoneDelegate.handleError @ zone.js:369 
 
webpackJsonp.579.Zone.runTask @ zone.js:168 
 
ZoneTask.invoke @ zone.js:460

+0

**これは**フロントエンドエラーではない可能性が高い**です。クロスオリジンエラーは常にバックエンド問題(正しいヘッダーを使用しない)か両方の組み合わせ(例えば、 '127.0.0.1'の代わりに' localhost'から '127.0.0.1'にアクセスする)です。また、悪いルートになる可能性もありますが、禁止されたエリア、間違ったポートまたは誤植にアクセスすると、一部のサーバーでCORSエラーが発生しますが、バックエンドの問題である可能性が最も高いです。 – Randy

+0

エラーメッセージに 'Origin' nullが含まれているため、アクセスが許可されていません。それは内部エラーとして私に聞こえます。通常はあなたのIPアドレスです。 – Randy

答えて

1

イントロを

アクセス制御 - 許可 - 起源は、CORS(クロスソースリソース共有)メカニズムの一部で、Webサーバーのクロスドメインアクセスコントロールを提供します。アプリ/サイトをCSRF(クロスサイトリクエスト偽造)から保護するための場所です。

オウ、それがブラウザによって強制されます

CORS/CSRF

要求は、アクセス制御チェックを渡しません

応答プリフライトに問題:いいえ "アクセス-Control-Allow-Origin 'ヘッダー i要求されたリソースに存在します。 オリジン 'ヌル'であるため、にアクセスできません。応答にHTTPステータスコード404がありました。

あなたのバックエンド(172.21.103.105:15871)は言っています:他のドメインからデータを取得できません。

あなたのフロントエンドアプリを使用すると、バックエンドWebサーバーとして使用しているどのようなバックエンド(同じIPに異なるポート===異なるドメイン)

からデータを照会できるようにするために、バックエンドのWebサーバの設定を編集する必要があり、この問題を解決するには?あなたがそれを提供するならば、私は自分の投稿を編集するつもりです。しかし、あなたは非常に簡単にそれをGoogleにすることができます。

+0

私はangle-cli – Jay

+0

でプロジェクトを実行しています。あなたの角度のアプリケーションとは関係ありません...角度は、バックエンド(172.21.103.105:15871)から情報を求めます。あなたのバックエンドには何も言われていません。これが何であるか教えてください172.21.103.105:15871/cgi-bin/blockpage.cgi?ws-session=2053590089 – VikingCode

+0

私はそれが私の会社側からの妨害であると思います – Jay

1

Angular CLI(フードの下でwebpackを使用している)を使用しているので、フロントエンドアプリケーションをバックエンドにプロキシすることができます。これはバックエンドに(プロキシ、実際には)あなたのフロントエンド要求が同じドメインからのものだと考えるために "トリック"します。

このソリューションは、アクセスしようとしているサーバーのURLのみが同じドメインからの要求を許可し、アプリケーションが同じドメインで実行される場合に適しています。

意味 - アプリケーションを本番環境に配備した場合、呼び出すサービスと同じドメインでホストされます。これは良いアプローチです。サービスが、アプリケーションと同じドメインでホストされないサードパーティのサービスである場合は、ホストされたアプリケーションからCORSエラーが表示されます。

このようなものを含むプロキシ設定ファイルを作成することによって、あなたのセットアッププロキシを:

​​

次に、このようなNPMスクリプトを使用してアプリケーションを提供:

"start": "ng serve --proxy-config _your_proxy_config_.json" 

は、ドキュメントを見てくださいHERE

+0

エラーが172.21.103.105:15871/cgi-bin/blockpage.cgi?ws-session=18446744073498507546:1となっています。オプションhttp://172.21.103.105:15871/cgi-bin/blockpage.cgi?ws-session=18446744073498507546 404(見つからない) ログイン:1 XMLHttpRequestはhttp://172.21.103.105:15871/cgi-bin/blockpage.cgi?ws-session=18446744073498507546をロードできません。プリフライト要求への応答がアクセス制御チェックを通過しない:要求されたリソースに「アクセス制御許可」がない。したがって、原点「ヌル」はアクセスが許可されません。レスポンスにHTTPステータスコード404がありました。 – Jay

+0

**「トリック」**が良い解決策である理由を教えてください。私は**ハイジャックのいくつかのURL **の利点であることを意味し、問題の設定を意図したものではない。 – VikingCode

+0

@VikingCodeのトリックは本当に悪い言葉です。サーバーが同じドメインからのアクセスのみを許可している場合は、良い解決策です。そして、あなたがlocalhost上で開発しているときに、同じドメインから来ているように見えるようにして、要求が通過するようにすることができます。それがまったく別のサーバーであれば、それは実際の運用ではうまくいかないため、最適なソリューションではありません。 –