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完全是空的。 有什么帮助吗?
答案 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语句是否成功运行可能会更好。
另一个重要问题是您在数据库中以明文形式插入密码。你应该考虑加密它。 从不以明文形式存储密码!