node.js
  • sqlite3
  • 2017-04-26 7 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"); 
        } 
    }); 
    

    ここで間違っています。私がユーザーを登録しようとしていると、dbが完全に空である間に既に存在しているからです。 助けてください?次のことすべてにSqlite3、ユーザーは既に存在しません

    答えて

    0

    、私はあなたがこのsqliteのライブラリを使用していると仮定:https://www.npmjs.com/package/sqlite3

    res.send("Account already exists");は無条件に呼ばれています。クエリの結果を確認するのを忘れました。

    あなたのコードには他にも問題があります。 Frist of allでは、コールバックで非同期関数を使用していません。 db.getは非同期関数で、結果セットの最初の行またはエラー(see documentation)を受け取る2番目の引数としてコールバックを受け取ります。

    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も非同期です。したがって、res.end('OK')はの前にが実行され、データがデータベースに挿入されることに注意してください。おそらく、応答を送信する前にinsertステートメントが正常に実行されたかどうかを確認するほうがよいでしょう。

    もう1つの重要な問題は、データベースにパスワードをクリアに挿入することです。あなたはそれを暗号化することを考えるべきです。 決してパスワードを平文で保存してください!

    +0

    どうすればいいですか?私はこのことに全く慣れていないので、コードスニペットで私を打つことができますので、どのように動作するかを知ることができます。ありがとう。 – Infinito1337

    +0

    私はsqlite3を使用しています。 – Infinito1337

    +0

    編集された回答を参照してください。 –

    関連する問題