【发布时间】:2022-02-04 18:58:20
【问题描述】:
我正在尝试使用数据库执行用户验证。每当我尝试在表单上输入凭据时,页面都会加载带有消息的“http://localhost:3000/users”
Cannot POST /users
我很确定我的代码是正确的?我不确定我做错了什么,任何帮助将不胜感激。我的代码如下
var express = require('express');
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database(':memory:');
var app = express();
app.use(express.static('public_html'));
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port)
function normalizePort(val) {
var port = parseInt(val , 10);
if(isNaN(port)) {
return val;
}
if (port >= 0) {
return port;
} return false;
}
app.use(express.urlencoded({ extended: false }));
db.serialize(function () {
db.run("CREATE TABLE IF NOT EXISTS USER (id INTEGER NOT NULL PRIMARY KEY, username TEXT UNIQUE, password TEXT, fullname TEXT, purchase INTEGER, delivered INTEGER, vouchers INTEGER)");
db.run('INSERT INTO User (username, password, fullname, purchase, delivered, vouchers) VALUES ("george23", "night104", "George Smith", 3, 14, 2)');
db.run('INSERT INTO User (username, password, fullname, purchase, delivered, vouchers) VALUES ("worldtime", "super34", "John Lennon", 0, 43, 8)');
db.run('INSERT INTO User (username, password, fullname, purchase, delivered, vouchers) VALUES ("funtime82", "everyday1", "Ringo Starr", 3, 2, 1)');
db.run('INSERT INTO User (username, password, fullname, purchase, delivered, vouchers) VALUES ("treeman28", "plants4", "Elon Musk", 89, 39, 29)');
db.run('INSERT INTO User (username, password, fullname, purchase, delivered, vouchers) VALUES ("amazon1", "amazon4ever", "Jeff Bezos", 38, 0, 1)');
console.log('Displaying all the content from every row of the DB');
db.each("SELECT * FROM User", function (err, row) {
console.log("[all] User Name: " + row.username + " Password: " + row.password + " Full Name: " + row.fullname + row.purchase + row.delivered + row.vouchers);
});
});
app.get('/users', function (req, res, next) {
let html = '';
let username = req.query.username;
let password = req.query.password;
let totalPurchase = 0;
console.log("Just received GET data for users endpoint.");
console.log(`Data includes: ${username}, ${password}`);
console.log(username + password);
html += '<!doctype html><html lang="en">';
html += '<head>';
html += '<title>Online Store</title>';
html += '<meta charset="utf-8">';
html += '<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">';
html += '<link rel="stylesheet"';
html += ' href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"';
html += ' integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z"';
html += ' crossorigin="anonymous">';
html += '</head>';
html += '<body><div class="container">';
db.all(`SELECT * FROM User WHERE username = "${username}" AND password = "${password}"`, function (err, row) {
if (err) {
return console.error(err.message);
}
if (row.length === 0) {
console.log("Unknown user!");
html += '<h1>Login Failed</h1>';
html += 'the <em>User Name</em> or <em>Password</em> provide does not match or does not exist';
} else {
totalPurchase = row[0].purchase + row[0].delivered;
console.log("Known user!");
html += '<h1>Login Success</h1>';
html += '<p>Thank you <strong>' + row[0].username + "</strong> (username '" + row[0].fullname + "'). Login Success </p>";
html += '<p>Our records show you have purchased a total of <strong>' + totalPurchase + "</strong> dog food items <strong>Dog Food Store</strong>.</p>";
html += '<p>Your purchase records are:</p>';
html += '<ul><li> Instore = ' + row[0].purchase + '</li>';
html += '<li> Delivered = ' + row[0].delivered + '</li>';
html += '<li> Vouchers = ' + row[0].vouchers + '</li></ul>';
};
html += '</div>';
html += '</body></html>';
res.send(html);
});
});
app.listen(port, function ()
{
console.log("Web server running at: http://localhost:3000");
console.log("Type Ctrl+c to shut down the server");
});
我还包含了我的 index.html 文件。
<!doctype html>
<html lang="en">
<head>
<title>Pet Store DataBase Form</title>
<meta charset="utf-8">
<meta name="Pet Store Writer" content="Pet Store">
<meta name="description" content="Pet Store">
<meta name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Latest compiled and minified CSS -->
<!-- CSS only -->
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"
integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z"
crossorigin="anonymous">
</head>
<body>
<div class="container">
<h1>Pet Store</h1>
<br>
<h2>Customer Login:</h2>
<form action="/users" method="post">
<div class="form-group">
<label for="username">User Name:</label>
<input type="text" class="form-control" name="username" id="username">
</div>
<div class="form-group">
<label for="password">Password:</label>
<input type="password" class="form-control" name="password" id="password">
</div>
<button type="submit" value="Login"
class="btn btn-primary">Submit</button>
</form>
</div>
<!-- jQuery library -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"></script>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"
integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
crossorigin="anonymous"></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"
integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV"
crossorigin="anonymous"></script>
</body>
</html>
【问题讨论】:
标签: html node.js json forms node-sqlite3