the resource requested present origin nodejs node enable cross control cannot allow node.js express nginx cross-domain nodemailer

node.js - resource - node express origin



Solicitud POST no permitida-405 No permitida-nginx, incluso con encabezados incluidos (4)

Esta configuración para su nginx.conf debería ayudarlo.

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; # ... }

Tengo un problema al intentar hacer una solicitud POST en mi aplicación y busqué mucho, pero no encontré la solución.

Entonces, tengo una aplicación nodeJS y un sitio web, y estoy tratando de hacer una solicitud POST usando un formulario de este sitio, pero siempre termino en esto:

y en la consola veo:

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

eso está en esta línea de código:

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;

Leí muchas publicaciones y una documentación de dominio cruzado, pero no funcionó. fuente de investigación 1: http://enable-cors.org/server.html fuente de investigación 2: http://www.w3.org/TR/2013/CR-cors-20130129/#http-access-control-max-age

Lo que estoy haciendo ahora

Estoy intentando PUBLICAR desde un dominio diferente de mi servidor:

PETICIÓN POSTAL: http://name.github.io/APP-example/file.html , repositorio github

POST LISTENER: " http://xxx.xxx.x.xx:9000/email , servidor localhost (x-> mi dirección IP)

Entonces, tuve el mismo problema en otros archivos, pero lo arreglé poniendo este código al inicio de cada ruta:

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(); });

y lo arreglé haciéndolo.

Ahora, tengo el mismo problema, pero en este archivo la única diferencia es que trato con SMTP y correos electrónicos, así que publico un correo electrónico y envío un correo electrónico a este correo electrónico que recibí en la solicitud POST.

El código funciona perfectamente con POSTMAN, por lo tanto, cuando pruebo con POSTMAN, funciona y puedo publicar.

Incluí este código a continuación en lugar del primero que mostré, pero no funcionó tan bien:

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(); });

¿Alguien sabe cómo resolverlo?

Gracias.


Esta es la redirección de proxy real para el servidor deseado.

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; } }


He intentado la solución que redirige 405 a 200, y en el entorno de producción (en mi caso, es Google Load Balancing con contenedor Nginx Docker), este truco provoca unos 502 errores (Código de error de Google Load Balancing: backend_early_response_with_non_error_status).

Al final, he hecho que esto funcione correctamente al reemplazar Nginx con OpenResty, que es completamente compatible con Nginx y tiene más complementos.

Con ngx_coolkit , Now Nginx (OpenResty) podría servir archivos estáticos con solicitud POST correctamente, aquí está el archivo de configuración en mi caso:

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; } }

En la configuración anterior, utilizo override_method ofrecido por ngx_coolkit para anular el método HTTP para GET .


Me di cuenta de que esto no funcionaba con una configuración de proxy estático primero-luego-inverso. Esto es lo que parece:

location @app { proxy_pass http://localhost:3000$request_uri; } location / { try_files $uri $uri/ @app; error_page 405 @app; }