アプリケーションで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>
file.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-age
私が今していること:
サーバーの別のドメインからPOSTしようとしています:
POSTリクエスト: http://name.github.io/APP-example/file.html 、githubリポジトリ
POST LISTENER: " http://xxx.xxx.x.xx:9000/email 、サーバーlocalhost(x-> my ip address)
そのため、他のファイルでも同じ問題が発生していましたが、各ルートの最初にこのコードを追加して修正しました。
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();
});
誰かがそれを解決する方法を知っていますか?
ありがとうございました。
あなたのnginx.confへのこの設定はあなたを助けるはずです。
https://Gist.github.com/baskaran-md/e46cc25ccfac83f153bb
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 404 /404.html;
error_page 403 /403.html;
# To allow POST on static pages
error_page 405 =200 $uri;
# ...
}
これは、目的のサーバーへの実際のプロキシリダイレクトです。
server {
listen 80;
server_name localhost;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://xx.xxx.xxx.xxx/;
proxy_redirect off;
proxy_set_header Host $Host;
}
}
Static-first-then-reverse-proxyセットアップではこれが機能しないことに気付きました。これは次のようなものです。
location @app {
proxy_pass http://localhost:3000$request_uri;
}
location / {
try_files $uri $uri/ @app;
error_page 405 @app;
}
同様の問題がありましたが、ChromeでのみFirefoxが機能していました。 ChromeがヘッダーリクエストにOriginパラメーターを追加していることに気付きました。
だから私のnginx.confでは、location /ブロックの下にそれを避けるためにパラメータを追加しました
proxy_set_header Origin "";
405を200にリダイレクトするソリューションを試しましたが、実稼働環境(私の場合は、Nginx Dockerコンテナーを使用したGoogle Load Balancing)で、このハックによっていくつかの502エラーが発生します(Google Load Balancingエラーコード:backend_early_response_with_non_error_status)。
最後に、NginxをNginxと完全に互換性があり、より多くのプラグインを持つOpenRestyに置き換えることにより、この作業を適切に行いました。
ngx_coolkit を使用すると、Nginx(OpenResty)はPOST要求で静的ファイルを適切に処理できます。私の場合の構成ファイルは次のとおりです。
server {
listen 80;
location / {
override_method GET;
proxy_pass http://127.0.0.1:8080;
}
}
server {
listen 8080;
location / {
root /var/www/web-static;
index index.html;
add_header Cache-Control no-cache;
}
}
上記の構成では、 ngx_coolkit が提供するoverride_method
を使用して、HTTPメソッドをGET
にオーバーライドします。