Sqlite3,用户已存在,而不存在

时间:2017-04-26 17:18:57

标签: node.js sqlite

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完全是空的。 有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

在接下来的所有内容中,我假设您正在使用此sqlite库:https://www.npmjs.com/package/sqlite3

无条件地调用

res.send("Account already exists");。您忘了检查查询结果。

但您的代码中还有其他问题。首先,你没有使用回调的异步函数。 db.get是一个异步函数,它将回调作为第二个参数,它接收结果集的第一行或错误(see documentation)。

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也是异步的。请注意,{<1}}在数据插入数据库之前执行。在发送响应之前检查insert语句是否成功运行可能会更好。

另一个重要问题是您在数据库中以明文形式插入密码。你应该考虑加密它。 从不以明文形式存储密码!