2017-11-16 1 views
0

So habe ich einen Knoten-js-Server und ein Apache-Server auf dem gleichen Rechner, und eine der Javascript-Dateien sendet eine HTTP-Anfrage an den Node-js-Server. Der node-js-Server empfängt die Datei, liest die Daten ein, legt sie in der Datenbank wie gewünscht ab, sendet jedoch keine Statuscodes oder Daten zurück.Nodejs Server mit Express keine Antworten auf HTTP-Anfragen von Javascript-Datei sendet, aber die Anfragen empfängt und verarbeitet

Hier wird die XHTMLRequest Code-Schnipsel senden,

// creates a new http request to be sent to the nodejs server 
function createNewUser(username, password, email) { 

    // The url is the URL of our local nodejs server 
    var userCreateRequest = new XMLHttpRequest(); 
    userCreateRequest.open("POST", "http://<machine's IP>:8080/api/users"); 

    // Create json object for user data 
    var user = "name="+username+"&password="+password+"&email="+email; 
    alert(user); 

    // set content type for http request 
    userCreateRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 

    // Event listern for server response 
    // userCreateRequest.addEventListener("readystatechange", processRequest, false); 

    // Call process request whenever state changes 
    userCreateRequest.onreadystatechange = function() { 
      alert(this.readyState + ", " + this.status); 
      if (this.readyState == 4 && this.status == 200) { 

        var response = this.response; 
        alert(response.name); 

      } 

    } 

    // Send user data to server 
    userCreateRequest.send(user); 

} 

Und hier ist der Code für den Knoten-js-Server (mit express)

router.route('/users') 

    .post(function(req, res) { //create a new user 

      var user = new User(); 

      user.name = req.body.name; 
      user.password = req.body.password; 
      user.email = req.body.email; 

      user.save(function(err) { //add user object to database 

        if(err) 
          res.send(err); 

        res.status(200).json(user); 

      }); 

    }); 

Wie ich oben sagte, der Code funktioniert gut in Bezug auf den Körper der Anfrage in die Datenbank und was nicht, aber der Server sendet nicht die 200 OK-Antwort (oder ich nicht erhalten, aus irgendeinem Grund). Das einzige Mal, dass ich eine Warnung von onreadystatechange bekomme, ist es, wenn es Status 2, Status 0 und Status 4, Status 0 ist.

+0

'http: // : 8080' ist es eine Cross-Origin-Anfrage? Nachschlagen CORS - Express hat eine Cors-Modul, so dass es einfach ist –

+0

Ich fürchte nicht, wie ich bereits erwähnt, beide Server sind auf der gleichen Maschine gehostet. Aus irgendeinem Grund funktioniert http: // localhost: 8080/api/users nicht, während die externe IP-Adresse der Maschine ... – purxiz

+0

selbe Maschine ... selbe Schnittstelle? (8080) Wenn ja, warum lautet Ihre Anfrage mit einem FQDN? –

Antwort

1

Versuchen Sie unter Code-Snippet.

user.save(function(err, user) { 

       if(err) 
         res.send(err); 

       res.status(200).json(user); 

     }); 
0

Es wurde am Ende ein CORS Problem. Ich bin immer noch etwas unsicher, aber nach der Konfiguration des express/CORS Pakets, um Anfragen von der IP und dem Port meines Apache Servers zu erlauben, hat es angefangen zu arbeiten.

Mein Verständnis ist, dass Cross Herkunft eine andere Domäne impliziert, wo beide meiner Server (wie ich es verstehe) auf verschiedenen Ports auf der gleichen Domäne.

In beiden Fällen, aktiviert CORS das Problem. Danke an Jaromanda X, dass du mich auf die richtige Spur gebracht hast.

Verwandte Themen