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

部署后请求后端频繁触发500内部服务器错误,寻求排查方案

部署主机环境后数据库请求频繁500错误,偶尔正常响应

本地开发时站点无异常,部署至主机环境测试后出现问题:发起数据库请求时,多数情况下页面会持续加载直至出现500 Internal Server Error,仅偶尔能正常响应。

鉴于请求偶尔可正常执行,初步排除server.js端点定义及控制器逻辑的问题。以下为问题场景截图及相关代码:

  • 登录请求示例:登录请求示例
  • 请求处于挂起状态:请求挂起状态
    请求挂起状态详情
  • 请求失败:请求失败

补充说明:使用mysql2包连接数据库,查阅资料后怀疑是连接使用不当导致(正在了解连接池,但仍有困惑)。

数据库连接文件

require("dotenv").config();
const mysql = require("mysql2");

const db = mysql.createConnection({
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME,
    waitForConnections: true,
});

const connection = async () => {
    db.connect((err) => {
        if (err) throw err;
        console.log("数据库连接成功");
    })
}

exports.db = db;
exports.connection = connection;

首次数据库连接校验

connection().then(() => {
    app.listen(port, () => {
        console.log(`服务器运行在...`);
    });
});

登录逻辑

app.post("/dev-end/api/login", async (req, res) => {
     await singleAccount(db, req.body.email)
        .then(async (response) => {
            if (response.code) {
                res.render("templateLogin");
             }
            try {
                if (await bcrypt.compare(req.body.password, response.password)) {
                    const user = { id: response._id, name: response.name };
                    await deleteTokenById(db, user.id.toString());
                    const accessToken = generateAccessToken(user);
                    const refreshToken = jwt.sign(
                        user,
                        process.env.REFRESH_TOKEN_SECRET,
                        { expiresIn: "604800s" }
                    );
                    createToken(db, {
                        _id: user.id,
                        accessToken: accessToken,
                        refreshToken: refreshToken,
                        createdAt: new Date().toISOString().slice(0, 19).replace("T", " "),
                    }).then(
                        res
                            .cookie("access_token", accessToken, {
                                httpOnly: true,
                                maxAge: 60000 * 60 * 24 * 7,
                            })
                            .redirect("/dev-end/dashboard")
                    );
                } else {
                    res.render("templateLogin");
                }
            } catch {
                res.status(500).send();
            }
        })
        .catch(console.log);
});

singleAccount 函数

const singleAccount = async (conn, email) => {
    return await read(conn).then((res) => {
        if (!res.code) {
            const result = res.find((e) => e.email.toString() === email);
            if (!result) {
                return {
                    code: 404,
                    msg: "未找到对应邮箱的账户",
                };
            }
            return result;
        }
        return res;
    });
};

read 函数

const read = async (conn) => {
    const sql = `SELECT * FROM accounts`;
    return await conn.promise().query(sql)
        .then(([res, fields]) => res);
};

内容的提问来源于stack exchange,提问作者Juan enriquez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:16:07