Ich versuche, eine NodeJS-Anwendung mit Express zu entwickeln. Hier ist mein CodeNodeJS, Express, MySQL - Header kann nicht gesetzt werden, nachdem sie gesendet wurden
app.post('/open', checkStatus, function(req, res) {
if (req.error) {
console.log(req.log);
return res.json(req.error);
}
console.log(currentDate() + colors.gray('>> ') + colors.bold(colors.cyan(req.method)) + ' ' + colors.green('200') + ' ' + req.url);
var data = req.body;
status.door.isOpening = true;
setUser(data, function() {
setOpening(data, function() {
openTheDoorPlease(data, function(response, log) {
if (status.door.isOpening) {
status.door.isOpening = false;
console.log(log);
return res.json(response);
}
});
});
});
});
und hier der Fehler
throw err; // Rethrow non-MySQL errors
^
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:346:11)
at ServerResponse.header (/Users/yourmajesty/Sites/arduino-test/server/node_modules/express/lib/response.js:719:10)
at ServerResponse.send (/Users/yourmajesty/Sites/arduino-test/server/node_modules/express/lib/response.js:164:12)
at ServerResponse.json (/Users/yourmajesty/Sites/arduino-test/server/node_modules/express/lib/response.js:250:15)
at Query.<anonymous> (/Users/yourmajesty/Sites/arduino-test/server/server.js:179:22)
at Query.<anonymous> (/Users/yourmajesty/Sites/arduino-test/server/server.js:255:50)
at Query.<anonymous> (/Users/yourmajesty/Sites/arduino-test/server/server.js:276:42)
at Query._callback (/Users/yourmajesty/Sites/arduino-test/server/server.js:321:46)
at Query.Sequence.end (/Users/yourmajesty/Sites/arduino-test/server/node_modules/mysql/lib/protocol/sequences/Sequence.js:85:24)
at Query._handleFinalResultPacket (/Users/yourmajesty/Sites/arduino-test/server/node_modules/mysql/lib/protocol/sequences/Query.js:144:8)
Eigentlich, wenn die URL '/ open' mit POST-Methode, das erste Mal aufgerufen wird, ist alles ok. Aber das zweite Mal habe ich diesen Fehler. Alle Antworten, die ich gefunden habe, sprechen über die return
.
Der gesamte Code ist hier verfügbar: https://gist.github.com/fcordillot/48428cfccc260635672b9e27d86b5d07
Wer kann mir helfen?
'status.door.isOpening = true;' sieht so aus, als würden Sie globale Daten auf Ihrem Server einstellen. Ist das wirklich, was Sie vorhaben - Daten ändern, die alle Anfragen von allen Benutzern sehen und verwenden? – jfriend00
Wo ist diese Zeile in Ihrem Code 'throw err; // Wiederhole keine MySQL-Fehler? Sie sagen uns, dass das der Ursprung ist, aber Sie zeigen uns nicht den damit verbundenen Code. Das müssen wir sehen. – jfriend00
Außerdem verfügt Ihr Anforderungshandler über Codepfade, in denen keine Antwort gesendet wird. Das ist auch nicht korrekt. – jfriend00