ホーム>source

Nodeアプリケーションによって取得されるPythonでApp Engine APIを構築しました。 APIは、(1)本番環境でのリクエストの取得と投稿、および(2)開発中のリクエストの取得で期待どおりに機能します。開発中のポストリクエストで失敗し、その理由を理解するためにいくつかのヘルプを使用できます。

エラーメッセージ

私のノード環境では、次のエラーが表示されます。

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4444' is therefore not allowed access. The response had HTTP status code 500. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

しかし、すでにアプリ内でflask_corsパッケージを使用しているので、これは本当にCORSの問題なのでしょうか。

アクティブ化された仮想Python環境ログ:

File "/myproject/googleAdsApi/env/lib/python2.7/site-packages/urllib3/contrib/appengine.py", line 103, ininit "URLFetch is not available in this environment.")

したがって、おそらく仮想環境内でURLFetchの代替を使用する必要がありますか?

私の現在の実装

取得中:

fetch('http://localhost:8080/api/get_accounts', {
    method: "POST",
    mode: "cors", 
    cache: "no-cache", 
    credentials: "same-origin", 
    headers: {
        "Content-Type": "application/json; charset=utf-8",
    },
    redirect: "follow", 
    referrer: "no-referrer", 
    body: JSON.stringify(credentials)
})
.then(response => response.json())
.then(result => console.log(result));

flask_cors:

app = Flask(__name__)
cors = CORS(app, resources={r"/api/*": {"origins": "*"}})

あなたの答え
  • 解決した方法 # 1

    GAEアプリでローカル開発環境を実行するには、常にdev_appserver.pyを使用します。 GAEには多くの特性があり、ローカルのvirtualenvで手動で再現するのは困難です。さらに、さまざまなサービス(Taskqueues、Memcache、Storageなど)を監視するための便利なツールを多数入手できます。 dev_appserver.pyは多くのGAEネイティブAPIを自動的にロードして使用できるようにしますが、多くの場合、サーバーレス環境に適合した独自のバージョンの人気のあるライブラリがあります(URLFetchはその1つです)

    公式ドキュメント https://cloud.google.com/appengine/docs/standard/python/tools/using-local-server

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ HaskellのLuhn関数