You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js与XAMPP MySQL数据库连接及登录跳转问题排查

问题修复方案

1. 端口占用问题解决

XAMPP的MySQL服务默认占用3306端口,Node.js服务不能使用同一端口,修改app.js中的端口为其他值(比如3000):

const port = process.env.PORT || 3000; // 替换原3306为3000

启动Node.js服务后,访问http://localhost:3000即可。

2. 登录页面无响应问题修复

核心原因

  • HTML表单输入框缺少name属性,表单提交时无法传递用户名、密码参数到后端,导致req.body.username/req.body.password为undefined,数据库查询逻辑出错且未处理错误,请求挂起。
  • 数据库查询未添加错误捕获,一旦查询出错会直接导致响应无法正常结束。

修改后的HTML代码

给输入框补充name属性:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Krishi Mitra Admin Login</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Exo:wght@200&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="/assets/css/logstyle.css">
    <script src="assets/js/logmain.js"></script>
</head>

<body>
    <section>
        <div class="img">
            <img src="assets/imgs/bg.jpg">
        </div>
        <div class="content">
            <div class="form">
                <h2>Login</h2>
                <form action="/" method="post">
                    <div class="input">
                        <span>Username</span>
                        <input type="text" id="username" name="username"> <!-- 添加name属性 -->
                    </div>
                    <div class="input">
                        <span>Password</span>
                        <input type="password" id="password" name="password"> <!-- 添加name属性 -->
                    </div>
                    <div class="input">
                        <div class="submit">
                            <input type="submit" value="Sign In">
                        </div>
                    </div>
                    <span id="error"></span>
                </form>
            </div>
        </div>
    </section>
</body>

</html>

修改后的app.js代码

添加错误处理逻辑,移除多余的res.end(),并优化文件路径处理:

const express = require('express')
const bodyParser = require('body-parser')
const mysql = require('mysql')
var path = require('path')
const app = express()
const port = process.env.PORT || 3000; // 修改端口为3000

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

// 正确设置静态文件目录(假设assets与app.js同级)
app.use(express.static(__dirname));

const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'nodejs'
})

connection.connect(function(error) {
    if (error) throw error
    else console.log("connected to the database successfully!")
});

app.get("/", function(req, res) {
    res.sendFile(path.join(__dirname, "index.html")); // 使用path.join避免路径拼接错误
})

app.post("/", function(req, res) {
    var username = req.body.username;
    var password = req.body.password;

    // 先校验参数是否存在
    if (!username || !password) {
        return res.redirect("/");
    }

    connection.query("select * from loginuser where user_name = ? and user_pass = ?", [username, password], function(error, results, fields) {
        // 捕获数据库查询错误
        if (error) {
            console.error(error);
            return res.redirect("/");
        }
        if (results.length > 0) {
            res.redirect("/welcome"); // 跳转到已定义的dash.html路由
        } else {
            res.redirect("/");
        }
        // redirect会自动结束响应,无需额外res.end()
    })
})

app.get("/welcome", function(req, res) {
    res.sendFile(path.join(__dirname, "dash.html")) // 使用path.join保证路径正确性
})

app.listen(port, () => console.log(`Listening on port ${port}`))

3. 额外优化建议

  • 禁止明文存储密码,使用bcrypt等库对密码哈希处理后存入数据库,验证时比对哈希值。
  • 添加登录失败提示:通过URL参数传递错误信息,前端读取后在#error元素中显示。
  • 使用数据库连接池替代单连接,提升服务稳定性:
const pool = mysql.createPool({
    connectionLimit: 10,
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'nodejs'
})
// 查询时改用pool.query代替connection.query

内容的提问来源于stack exchange,提问作者Ayush Jhinkwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:50:19