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.
'http: //: 8080' ist es eine Cross-Origin-Anfrage? Nachschlagen CORS - Express hat eine Cors-Modul, so dass es einfach ist –
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
selbe Maschine ... selbe Schnittstelle? (8080) Wenn ja, warum lautet Ihre Anfrage mit einem FQDN? –