node.js
  • sqlite3
  • 2017-04-26 3 views 0 likes 
    0
    app.post('/register', function(req,res){ 
        console.log("register post got", req.body) 
        if (req.body.username && req.body.password) { 
        db.get("SELECT * FROM Users WHERE username = '" + req.body.username + "' LIMIT 1"); 
        res.end("Account already exists"); 
        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 requesiraehri"); 
        } 
    }); 
    

    tut, was hier falsch ist, denn wenn ich versuche, Benutzer zu registrieren, sagt er es ist bereits vorhanden, während der db völlig leer ist. Irgendwelche Hilfe?Sqlite3, Benutzer ist bereits vorhanden, während es nicht

    Antwort

    0

    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!

    +0

    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

    +0

    Ich benutze sqlite3. – Infinito1337

    +0

    Siehe die bearbeitete Antwort. –

    Verwandte Themen