Вы не проверяете, успешно ли ваш insert
. Это может быть неудачным. Вы можете проверить с помощью обратного вызова, который будет запущен после завершения оператора или при возникновении ошибки.
Вставка значений прямо в ваш SQL делает ваш код уязвимым для SQL-инъекции , очень распространеннойпроблема безопасности и другие синтаксические ошибки. Например, если ваше сообщение содержит "
, оно сломает insert
.
. Вместо этого вам следует использовать заполнители.
Соединяя их вместе, это что-то вроде этого.
db.run(
"INSERT INTO users (name, email, message) VALUES ($name,$email,$message)",
{ $name: name, $email: email, $message: message },
(error) => {
if( error ) {
console.log(`Insert failed: ${error}`);
res.status(500);
}
else {
console.log("Information Entered Succesfully!");
res.status(200).redirect('/');
}
}
);
Ваш код может быть упрощен с помощью db.each
.
app.get('/Contact', function(request, response, next) {
response.write(`<table border=1>`);
response.write("<tr>");
response.write(`<th>ID</th>`);
response.write(`<th>Name</th>`);
response.write(`<th>Message</th>`);
response.write("</tr>");
db.each('SELECT * FROM users;', function(error, row) {
response.write("<tr>");
response.write(`<td>${row["name"]}</td>`);
response.write(`<td>${row["email"]}</td>`);
response.write(`<td>${row["message"]}</td>`);
response.write("</tr>");
});
response.write("</table>");
});
Это проще и эффективнее. db.all
будет отбрасывать все строки в память одновременно, потенциально используя много памяти, если у вас много пользователей. db.each
будет получать их по одному.