エクスプレスバックエンドでangular 7アプリを開発しました。localhost:3000
およびangularクライアントはlocalhost:4200で実行されています。
の中に server.js
持っている(コード全体ではない)
const app = express();
// Enable CORS
app.use(cors());
// Get our API routes
const api = require('./api');
// Set our api routes
app.use('/api', api);
app.use(express.static(__dirname + '/dist/sfdc-event'));
Api.jsファイルには、アクセストークンを送信してユーザーを認証する https://example.com にリダイレクトするrouter.get( '/ oauth2/login')があります(OAuth2認証) 。
URLを呼び出しているとき http:// localhost:3000/api/oauth2/login すべてが正常に機能していますが、同じことをangular = component.ts-> service.ts次のエラーが表示されます。
クロスオリジンリクエストがブロックされました:同じオリジンポリシーがリモートリソースの読み取りを許可していません理由:CORSヘッダー「Access-Control-Allow-Origin」がありません
Http。getを実行するサービスapi.service.tsを呼び出すボタンがあるlogin.component.tsに続く角度付きアプリフロー。
login.component.ts
sfdcLogin(): void {
console.log('DEBUG: LoginComponent: ', 'Login button clicked..');
this.apiService.login().subscribe( data => { console.log( data ); });
}
api.service.ts
login() {
console.log('DEBUG: APiService login(): ', 'login() function.');
const URL = 'oauth2/login';
console.log('DEBUG: ApiService login URL : ', `${environment.baseUrl}/${URL}`.toString());
return this.http.get(`${environment.baseUrl}/${URL}`)
.pipe( map( res => res ));
}
誰かがエラーを乗り越えるのを手伝ってくれますか?私はa)CORS b)server.jsから静的ファイルを提供しています
app.use(express.static(__dirname + '/dist/sfdc-event'));
c)動的環境変数。他に何が欠けていますか?
Angular 7の場合、他の実装を行う必要があります。angularドキュメンテーションから、proxy.jsファイルを作成する必要があります。
https://angular.io/guide/build#using-corporate-proxy
独自のバックエンドサーバーのパスを編集します。
proxy.js:
var HttpsProxyAgent = require('https-proxy-agent');
var proxyConfig = [{
context: '/api',
target: 'http://your-remote-server.com:3000',
secure: false
}];
function setupForCorporateProxy(proxyConfig) {
var proxyServer = process.env.http_proxy || process.env.HTTP_PROXY;
if (proxyServer) {
var agent = new HttpsProxyAgent(proxyServer);
console.log('Using corporate proxy server: ' + proxyServer);
proxyConfig.forEach(function(entry) {
entry.agent = agent;
});
}
return proxyConfig;
}
module.exports = setupForCorporateProxy(proxyConfig);
後でこれをpackage.jsonに追加します
"start": "ng serve --proxy-config proxy.js"
これを次のように呼び出します:
npm start
そして、app.jsに以下を追加するだけです:
const cors = require("cors");
app.use(cors());
私は同じ問題を抱えていて、それが私の問題を解決しました。私はそれが役立つことを願っています!
サーバー側でAngular cliおよび。net Frameworkを使用しています。
この問題を解決するには、次の手順を使用して、サーバー側でCORS対話を有効にします。
Install-Package Microsoft.AspNet.WebApi.Cors -Version 5.2.6
そして、WebApiConfigクラスに:
追加 using System.Web.Http.Cors;
内部Register(HttpConfiguration config)メソッド:
var cors = new EnableCorsAttribute("http://localhost:4200", "*", "*"); config.EnableCors(cors);
または
var cors = new EnableCorsAttribute("*", "*", "*"); //Origin, headers, methods config.EnableCors(cors);
http://localhost:4200/api
のすべての呼び出しをhttp://localhost:3000/api
で実行されているサーバーに転送するには、 following ステップを実行します。
Package.jsonの隣にあるプロジェクトのsrc /フォルダーにproxy.conf.jsonファイルを作成します。
次のコンテンツを新しいプロキシファイルに追加します。
{"/ api":{"target": "http://localhost:3000
"、 "secure":false}}
CLI構成ファイル、angular.jsonで、proxyConfigオプションをサーバーターゲットに追加します。
... "architect":{"serve":{"builder": "@ angular-devkit/build-angular:dev-server"、 "options":{"browserTarget": "your-application-name:build" 、 "proxyConfig": "src/proxy.conf.json"}、...
このプロキシ設定で開発サーバーを実行するには、ng serveを呼び出します。
これが開発専用の場合は、angular-cliに付属のプロキシを使用することをお勧めします。 proxy.jsonというファイルを作成します
そして
{
"/api/oauth2/login": {
"target": "http://localhost:3000/api/oauth2/login",
"secure": false
}
}
呼び出しng serve --proxy-config proxy.json
。これがまだ本番環境で問題になると予想される場合は、より大きな会話が必要です。
完全なドキュメント: https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md
また、CORSとは何ですか: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
CORSの問題を回避するためにコールバックメカニズムを変更しました。ユーザーが https://example.com から認証を受けるためにOAuthフローを利用しています。 https://example.com/auth/callback にリダイレクトしていましたが、 http:// localhost:4200 その後、コールバックURLをサーバー http:// localhost:3000 に送信すると、CORSエラーが発生していました。
今、私はそれをクライアント http:// localhost:4200 にリダイレクトし、CORSの問題を乗り越えました。 GET、POST、DELETE、PATCHに対する他のすべての呼び出しは、 http:// localhost:3000 からのものであり、正常に動作しています。
ご意見ありがとうございます。
angularアプリは4200ポートで実行され、バックエンドは3000ポートで実行されているため、両方のアプリケーションのオリジンは異なります。
この問題を解決するには、マシンで「nginx」をセットアップします。
これにより、angularおよびバックエンドからのすべてのリクエストが「nginx」サーバー経由で送信されます。したがって、CORSの問題が解決されます。
これはすでに回答済みですが、CORSの問題を探している人には役立つかもしれません。以下の3つの手順に従って、この問題を解決できます。 1. proxy.conf.jsonファイルを作成し、アプリのルートレベルに配置します。 2. package.jsonファイルで、ngstart 3にプロキシパラメーターを追加します。angular.jsonで、プロキシファイルエントリを追加します。 4.すべての残りの呼び出しを/ api/getDataなどに変更します。
完全なステップバイステップのチュートリアルはこちらです。 http://www.codeyourthought.com/angular/proxy-to-make-http-call-in-angular/