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