61

アプリケーションで POST リクエストを実行しようとすると問題が発生し、多くの検索を行いましたが、解決策が見つかりませんでした。

したがって、nodeJS アプリケーションと Web サイトがあり、このサイトのフォームを使用して POST 要求を実行しようとしていますが、常に次のようになります。

ここに画像の説明を入力

そしてコンソールに次のように表示されます:

    Uncaught TypeError: Cannot read property 'value' of null 
Post "http://name.github.io/APP-example/file.html " not allowed

それはこのコード行にあります:

file.html:

<form id="add_Emails" method ="POST" action="">

    <textarea rows="5" cols="50" name="email">Put the emails here...
    </textarea>

        <p>
        <INPUT type="submit" onclick="sendInvitation()" name='sendInvitationButton' value ='Send Invitation'/>
        </p>


</form>

<script src="scripts/file.js"></script>

ファイル.js:

function sendInvitation(){

    var teammateEmail= document.getElementById("email").value;

多くの投稿とクロスドメインのドキュメントを読みましたが、うまくいきませんでした。調査ソース 1: http://enable-cors.org/server.html 調査ソース 2: http://www.w3.org/TR/2013/CR-cors-20130129/#http-access-control-max-年

私が今していること:

サーバーの別のドメインから POST しようとしています:

POST リクエスト: http://name.github.io/APP-example/file.html、github リポジトリ

POST LISTENER : " http://xxx.xxx.x.xx:9000/email、サーバー localhost (x-> 私の IP アドレス)

そのため、他のファイルでも同じ問題が発生しましたが、各ルートの先頭にこのコードを配置して修正しました。

var express = require('express');
var sha1 = require('sha1'); 

var router = express.Router(); 
var sessionOBJ = require('./session');

var teams = {} 
var teamPlayers = []

router.all('*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header("Access-Control-Allow-Methods", "PUT, GET,POST");
  next();
 });

そして、私はそれを修正しました。

今、私は同じ問題を抱えていますが、このファイルでは、SMTP と電子メールを処理することだけが異なるため、電子メールを投稿し、POST 要求で受信したこの電子メールに電子メールを送信します。

コードは POSTMAN で完全に正常に動作するため、POSTMAN でテストすると動作し、投稿できます。

最初に示したコードの代わりに、以下のコードを含めましたが、同様に機能しませんでした。

router.all('*', function(req, res, next){
            res.header("Access-Control-Allow-Origin", "*")
            res.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
            res.header("Access-Control-Allow-Headers", "Origin, Content-Type, Accept")
            res.header("Access-Control-Max-Age", "1728000")
            next();
        });

誰かがそれを解決する方法を知っていますか?

ありがとうございました。

4

8 に答える 8

2

私は、これが static-first-then-reverse-proxy セットアップで機能していないことに気付きました。これは次のようになります。

location @app {
  proxy_pass http://localhost:3000$request_uri;
}

location / {
  try_files $uri $uri/ @app;
  error_page 405 @app;
}
于 2016-10-04T07:42:01.233 に答える
2

私の場合、処理されて戻り値を取得するのは、JSON の POST 送信でした。nginxの有無にかかわらず、アプリサーバーのログをクロスチェックしました。私が得たのは、自分の場所が proxy_pass url に追加されておらず、HTTP プロトコルのバージョンが異なるということでした。

  • nginx なし: "POST /xxQuery HTTP/1.1" 200 -
  • nginx の場合: "POST / HTTP/1.0" 405 -

私の以前のロケーションブロックは

location /xxQuery {
    proxy_method POST;
    proxy_pass http://127.0.0.1:xx00/;
    client_max_body_size 10M;
}

に変更しました

location /xxQuery {
    proxy_method POST;
    proxy_http_version 1.1;
    proxy_pass http://127.0.0.1:xx00/xxQuery;
    client_max_body_size 10M;
}

出来た。

于 2019-10-12T06:24:26.360 に答える
0

example.comでホストされている API としての Rails アプリでホストされているフロントエンド アプリとして、VueJs で同様の問題がありましたapi.example.com。Vue は、ENV変数を介してデータを取得するように構成されていましたVUE_APP_API_BASE_URL

本番サーバーで作成するのを忘れるという初歩的なミスを犯したenv.production.localため、VueJs アプリをビルドするときに URL が取得されませんでした。したがって、すべてのリクエストはexample.com/signin代わりにeg にルーティングされたapi.example.com/signinため、エラーが発生しました。

本番サーバーでファイルを作成して変数を追加すると、vuejs アプリを新たにビルドすると、すべて正常に機能しました。

于 2021-03-14T21:01:44.890 に答える
0

同様の問題がありましたが、Chrome でのみ Firefox が機能していました。Chrome がヘッダー リクエストに Origin パラメータを追加していることに気付きました。

だから私のnginx.confで、場所/ ブロックの下でそれを避けるためにパラメータを追加しました

proxy_set_header Origin "";
于 2018-12-24T10:04:23.293 に答える
0

手遅れですが、誰かがこの問題を抱えている場合は、nginx.conf に以下のコードを追加してください

server {

        ...

        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
                # With php-cgi (or other tcp sockets):

        }


}
于 2022-01-25T19:23:33.790 に答える