Dies ist der Code, der meinen http-Server ausführt, er vergleicht einen Schlüssel in einer GET-Anfrage mit den Schlüsseln in einer JSON-Datei namens "users", etwas weiter unten gezeigt. Wenn ich den Schlüssel eines der ersten beiden Benutzer in dieser Datei verwende, funktioniert es einwandfrei und reagiert genau so, wie ich es möchte. Als ich den Schlüssel des dritten Benutzer verwenden jedoch mit einem 403-Fehler reagiert (es läuft the response.writeHead(403);
Linie Was dies dazu führen könnten (diese iamges für die Fehler sehen.? https://imgur.com/a/jC7zn)Ich bekomme einen "Fehler: schreibe nach Ende" in NodeJS/Javascript, was könnte das verursachen?
var httpserver = http.createServer(function(request, response) {
try {
var key = '';
if (request.url.indexOf('k=') != -1) {
key = request.url.substring(request.url.indexOf('k=') + 2);
}
for (i = 0; i < Object.keys(users).length; i++) {
if (users[Object.keys(users)[i]].apikey == key) {
response.writeHead(200, {
'Content-Type': 'application/json'
});
response.write(JSON.stringify(users, null, '\t'));
response.end();
} else {
response.writeHead(403);
response.end();
}
}
} catch (err) {
console.log(err);
}
});
Die „Benutzer“ JSON Datei (ids, Namen und APIkeys für obious Gründen verschleiert):
{ "user1": {
"auth": "3",
"name": "Name1",
"apikey": "key1" },
"user2": {
"auth": "3",
"name": "Name2",
"apikey": "key2" },
"user3": {
"auth": "3",
"name": "Name3",
"apikey": "key3" }
}
Dies ist der Fehler, die ich bekomme:
Error: write after end
at write_ (_http_outgoing.js:625:15)
at ServerResponse.write (_http_outgoing.js:620:10)
at Server.<anonymous> (pathtoserver/server.js:42:16)
at emitTwo (events.js:126:13)
at Server.emit (events.js:214:7)
at parserOnIncoming (_http_server.js:602:12)
at HTTPParser.parserOnHeadersComplete (_http_common.js:117:23)
Vorsicht, Zeile 42 Zeichen 16 (bei Server (pathto. server/server.js: 42: 16)) bezieht sich auf response.write(JSON.stringify(users, null, '\t'));
In dem Code an der Spitze.
Ich habe das Gefühl, dass es etwas damit zu tun hat, dass die Schleife zu lange dauert, bevor der dritte Benutzer gefunden wird, und die Verbindung zuvor geschlossen wurde. Was könnte das sein?
Ich hoffe, dass ich genug Informationen zur Verfügung gestellt habe, und wenn nicht, sicher sein, nach anderen Dingen zu fragen, die ich hinzufügen könnte, die deiner Hilfe nützen werden!
P.S. Bitte seien Sie vorsichtig, dass Englisch nicht meine Muttersprache ist und dass ich immer noch auf der Highschool bin, was bedeutet, dass es in diesem Text einige Fehler geben könnte.
Ihr Code ruft 'response.end()' * innerhalb der Schleife * auf. Es wird * immer * einen Fehler "Schreiben nach Ende" erhalten. – Pointy
Oh Mann, ich bin so dumm, dass ich das nicht bemerkt habe, danke! Ich denke, ich bin im Moment einfach zu müde, und dass ich die Dinge herumwälze, ohne wirklich an die Konsequenzen zu denken! Ich werde morgen weiter machen. Vielen Dank! –