【问题标题】:Node JS User Validation using Data Base使用数据库的 Node JS 用户验证
【发布时间】: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


    【解决方案1】:

    您的代码可能正确但不完整。

    您正在尝试将数据发送到服务器上的路径。

    您将此路线称为“/users”

    当你这样做时,你使用了一个 HTTP 动词。 您在这方面使用的动词是 POST 动词。

    服务器没有找到任何处理程序来处理该特定路由上的后置动词。

    它回复:“无法发布 /users”

    解决方案是让您声明一个处理程序来处理对用户路由的发布请求。

    在 app.get("/users" , function(req , res , next){ 末尾添加这行代码 //为简洁起见删除 })

    见下面要添加的代码:

        app.post("/users" , (req , res) => {
            //Add your own implementation here
            res.send("Not yet implemented")
        })
    
    

    【讨论】:

      【解决方案2】:

      查看快递文档https://expressjs.com/en/starter/basic-routing.html

      app.route('/users')
        .get(function(req, res) {
          res.send('Get an user');
        })
        .post(function(req, res) {
          res.send('Add an user');
        })
        .put(function(req, res) {
          res.send('Update an user');
        });
      

      你没有post方法

      【讨论】:

        猜你喜欢
        • 2020-07-30
        • 1970-01-01
        • 2020-03-16
        • 2016-11-20
        • 1970-01-01
        • 1970-01-01
        • 2019-11-29
        • 1970-01-01
        • 2015-08-16
        相关资源
        最近更新 更多