#javascript #html #node.js #sqlite
#javascript #HTML #node.js #sqlite
Вопрос:
Я относительно новичок в использовании node.js и sqlite3. Я пытаюсь проверить, соответствуют ли имя пользователя и пароль, введенные в форме, тем, которые сохранены в базе данных sqlite3. Я хочу выдать сообщение об ошибке, если введенные имя пользователя / пароль не совпадают с данными в БД, в противном случае отправьте пользователя на другую страницу.
Соответствующая форма:
<form action="/account" method="post">
<div class="form-group">
<label for="user">Name:</label>
<input type="text" id="user" name="name">
</div>
<div class="form-group">
<label for="pass">Password:</label>
<input type="password" id="pass" name="password">
</div>
<button type="submit">Submit</button>
Создание базы данных и сравнение с формой:
var db = new sqlite3.Database(':memory:');
db.serialize(function() {
db.run("CREATE TABLE Accounts (id INTEGER, username TEXT, password TEXT, fullname TEXT");
db.run(`INSERT INTO Accounts VALUES (1, "bob", "password", "Bob Bobson")`);
});
});
db.close();
app.get('/account', function (req, res) {
db.all('SELECT * FROM Accounts', function(err, rows){
rows.forEach(function (row){
if (row.username == req.body.user)
//go to success page
if (row.username != req.body.usr)
//list error
});
res.send();
});
});
Ответ №1:
Неразумно запускать запрос и извлекать все строки из таблицы accounts. Если таблица слишком большая, это займет много времени. Лучше выполнить запрос «get» с параметрами и получить конкретную строку, если она существует. Если он существует, параметр строки в обратном вызове функции НЕ будет неопределенным.
db.get("SELECT * from ACCOUNTS where username=? and password=?",
[req.body.user,req.body.password],function(err,row){
if(typeof row!=='undefined' amp;amp; row!=null){ console.log('user exists'); }
});