【问题标题】:Sqlite3, user already exists while it does notSqlite3,用户已经存在但不存在
【发布时间】:2017-04-27 03:28:13
【问题描述】:
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");
  }
});

这里出了什么问题,因为如果我试图注册用户,它说它已经存在,而数据库完全是空的。 有什么帮助吗?

【问题讨论】:

    标签: node.js sqlite


    【解决方案1】:

    在接下来的所有内容中,我假设您使用的是这个 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 也是异步的。所以请注意,res.end('OK') 是在数据插入数据库之前执行的。在发送响应之前检查插入语句是否成功运行可能会更好。

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

    【讨论】:

    • 我该怎么做?我对这个东西很陌生,所以你能用代码 sn-p 给我打个电话,这样我就可以了解它是如何工作的。谢谢。
    • 我正在使用 sqlite3。
    猜你喜欢
    • 2018-09-01
    • 2020-10-31
    • 2010-11-14
    • 2014-02-01
    • 2018-09-05
    • 2011-12-29
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多