alle in denen folgen, ich nehme an, Sie diese SQLite-Bibliothek verwenden: https://www.npmjs.com/package/sqlite3
res.send("Account already exists");
bedingungslos genannt wird. Sie haben vergessen, das Ergebnis Ihrer Anfrage zu überprüfen.
Aber es gibt andere Probleme in Ihrem Code. Vor allem verwenden Sie keine asynchronen Funktionen mit Rückrufen. db.get
ist eine asynchrone Funktion und nimmt einen Rückruf als zweites Argument an, der entweder die erste Zeile des Resultsets oder einen Fehler (see documentation) empfängt.
app.post('/register', function(req,res){
console.log("got register post", req.body)
if (req.body.username && req.body.password) {
db.get("SELECT * FROM Users WHERE username = ? LIMIT 1", req.body.username, function(err, row){
if(row){
res.end("Account already exists");
} else {
var stmt = db.prepare("INSERT INTO user VALUES (?,?)");
stmt.run(req.body.username, req.body.password);
res.end("OK");
}
}
} else {
res.end("username and password are required");
}
});
stmt.run
ist auch asynchron. Achten Sie also darauf, dass res.end('OK')
ausgeführt wird, bevor die Daten in die Datenbank eingefügt werden. Es wäre wahrscheinlich besser zu prüfen, ob die INSERT-Anweisung erfolgreich ausgeführt wird, bevor die Antwort gesendet wird.
Ein weiteres wichtiges Problem ist, dass Sie das Kennwort in der Datenbank löschen. Du solltest darüber nachdenken, es zu verschlüsseln. Nie Passwörter im Klartext speichern!
Wie kann ich es tun? Ich bin ziemlich neu in diesem Ding, also können Sie mich mit einem Code-Ausschnitt treffen, damit ich lernen kann, wie es funktioniert. Vielen Dank. – Infinito1337
Ich benutze sqlite3. – Infinito1337
Siehe die bearbeitete Antwort. –