2016-10-12 4 views
0

Ich verwende reagieren, um Daten an meine API zu senden. Jede POST-Anfrage, die ich mache, gibt mir eine OPTIONS-Anfrage, und ich muss das beheben. Ich denke, ich muss vielleicht eine Preflight-Struktur erstellen, aber nachdem ich darüber gelesen habe, weiß ich immer noch nicht, wie ich es implementieren soll.So aktivieren Sie CORS von Nodejs Server

Im Moment arbeite ich als so meine API anschließe ...

fetch('http://localhost:8080/login', { 
     method: 'POST', 
     mode:'cors', 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json' 
     }, 
     body: JSON.stringify({ 
      username: this.state.username, 
      password: this.state.password 
     }) 
    }); 

Diese onSubmit genannt wird. Ich sende einige Daten an meine POST-Anfrage, also nehme ich an, dass ich diese Header benötige.

Jetzt in meinem Knoten js-Server-API habe ich die folgende Prozedur ...

var responseHeaders = { 
    "access-control-allow-origin": "*", 
    "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS", 
    "access-control-allow-headers": "content-type, accept", 
    "access-control-max-age": 10, 
    "Content-Type": "application/json" 
}; 

app.post('/login', function(req, res, next) { 
    if (req.method == "OPTIONS") { 
     res.writeHead(statusCode, responseHeaders); 
     res.end(); 
    } 
    console.log("hello"); 
    ... 

Dies funktioniert nicht, aber wenn ich eine Anfrage bekomme ich ...

OPTIONS /login 200 8.570 ms - 4 

Wenn Ich entferne die Header, die der POST funktioniert, aber die Daten (Benutzername, Passwort) werden nicht durchgelassen.

Wie kann ich dieses OPTIONS Problem umgehen?

+0

Scheck schreiben http://stackoverflow.com/q/7067966/3284355 – Molda

Antwort

1

app.post ist wie der Name schon sagt, für POST Anfragen. Anfrage wird nicht an diese Methode weitergeleitet.

Sie benötigen einen Handler speziell für options wie ja diese

app.options("*",function(req,res,next){ 
    res.header("Access-Control-Allow-Origin", req.get("Origin")||"*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    //other headers here 
    res.status(200).end(); 
}); 
+0

ok diese fangen die Optionen Anfrage, aber die POST-Anforderung ist immer noch nicht gelesen, und ich brauche es irgendwie, um Daten zu übertragen. – Bolboa

+0

Überprüfen Sie Ihre Konsole.So sehen Sie Fehler –

+0

keine Fehler, die oben genannten Optionen Anfrage scheint zu funktionieren. Aber dann funktioniert mein POST-Handler, der nach dem OPTIONS-Handler kommt, nicht – Bolboa

2

Der Browser sendet Preflight-Optionsanforderungen an den Server, um zu prüfen, ob CORS auf dem Server aktiviert ist. So aktivieren Sie cors auf der Server-Seite fügen Sie diese zu Ihrem Server-Code

app.use(function(req, res, next) { 
     res.header("Access-Control-Allow-Origin", "*"); 
     res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
     next(); 
    }); 
Verwandte Themen