Mam problem z próbą wykonania żądania POST w mojej aplikacji i dużo szukałem, ale nie znalazłem rozwiązania.Żądanie POST jest niedozwolone - 405 niedozwolone - nginx, nawet z dołączonymi nagłówkami
Tak, mam aplikację nodeJS i strony internetowej, a ja staram się robić żądania POST za pomocą formularza z tej strony, ale zawsze kończy się w ten sposób:
oraz w konsola widzę:
Uncaught TypeError: Cannot read property 'value' of null
Post "http://name.github.io/APP-example/file.html " not allowed
że jest w tej linii kodu:
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;
Czytałem wiele słupek i dokumentację domenach, ale to nie działa. źródło badawczy 1: http://enable-cors.org/server.html źródło badawczy 2: http://www.w3.org/TR/2013/CR-cors-20130129/#http-access-control-max-age
Co robię teraz:
Próbuję post z innej domeny mojego serwera:
POST request: http://name.github.io/APP-example/file.html, GitHub repozytorium
POST słuchacz: "http://xxx.xxx.x.xx:9000/email, serwer localhost (x-> mój adres IP)
Tak, miałem ten sam problem w innych plikach, ale naprawiłem to wprowadzenie tego kodu w begginning każdej trasy:
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();
});
i naprawiłem to robi.
Teraz mam ten sam problem, ale w tym pliku jedyną różnicą jest to, że mam do czynienia z SMTP i e-mailami, więc wysyłam wiadomość e-mail i wysyłam wiadomość e-mail na tę wiadomość e-mail, którą otrzymałem w żądaniu POST.
Kod działa całkiem dobrze z POSTMAN, więc kiedy testuję z POSTMAN to działa i mogę pisać.
włączyłem ten kod poniżej zamiast pierwszego pokazałem, ale to nie działa tak dobrze:
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();
});
Czy ktoś wie jak go rozwiązać?
Dziękuję.
Myślę, że problem występuje, ponieważ [nginx nie zezwala na POST na zawartość statyczną] (http://leandroardissone.com/post/19690882654/nginx-405-not-allowed) – Curious
W jaki sposób powstaje zawartość statyczna? Czy możesz być bardziej czysty? Dziękuję za twój komentarz! :) – debeka
Jeśli nginx ma określone 'location' zawiera dyrektywę' proxy_pass' lub 'fastcgi_pass', jest to zawartość dynamiczna, w przeciwnym razie - statyczna. Innymi słowy, zawartość statyczna ma miejsce, gdy nginx odczytuje plik z systemu plików i wysyła go w niezmienionym stanie. Treść dynamiczna polega na tym, że gdy określony język programowania generuje odpowiedź. Aby rozwiązać ten problem, powinieneś upewnić się, że 'lokalizacja' nginx, które obsługuje' httpxxxx.xxx.x.xx: 9000/email', zawiera 'proxy_pass' dyrektywę – Curious