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

API持续加载无响应故障:昨日正常今日无法获取数据库数据

问题描述

昨日API可正常运行,能将数据库信息以JSON格式返回。今日测试查询时页面无限加载,无任何结果返回,VSC和浏览器控制台均无报错。已尝试更换端口、重启应用,相关代码如下:

const dbapp = require('mysql');
const express = require('express');
const cors = require('cors');

const app = express();
app.use(cors);
const database = dbapp.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'bws_os'
});

app.get('/v1/produktdetails', (re, res) =>{
    const sql = "Select * from produktdetails"
    database.query(sql, (err, data) =>{
        if(err) return res.json(err);
        return res.json(data);
    })
});

app.get('/v1/produktdetails/:id',(re, res) =>{
    const sql = "Select * from produktattribute WHERE ProduktID=:id"
    database.query(sql, (err, data) =>{
        if(err) return res.json(err);
        return res.json(data);
    })
});

app.listen(5137, ()=>{
    console.log('Listening');
})
问题排查与修复
  • CORS中间件调用错误:app.use(cors) 必须写成 app.use(cors()),因为cors是函数,需要调用后返回中间件实例,不调用的话请求会被挂起,导致无限加载。
  • SQL参数绑定错误:mysql模块不支持:id这种命名占位符,得用?作为占位符,并且在query方法里传入参数数组,否则SQL无法正确执行,请求会卡在数据库查询环节。
  • 未监听数据库连接错误:当前代码没处理数据库连接失败的情况,一旦数据库连不上,请求会无响应且不报错,得加上连接错误监听。
  • 请求对象命名不规范:路由里的re建议改成req,虽然不影响功能,但统一命名更易维护。
修复后的完整代码
const dbapp = require('mysql');
const express = require('express');
const cors = require('cors');

const app = express();
// 修复CORS中间件调用
app.use(cors());

const database = dbapp.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'bws_os'
});

// 添加数据库连接错误监听
database.on('error', (err) => {
    console.error('数据库连接出错:', err);
});

// 连接数据库并打印状态
database.connect((err) => {
    if (err) {
        console.error('数据库连接失败:', err);
        return;
    }
    console.log('已成功连接到数据库');
});

// 修复请求对象命名为req
app.get('/v1/produktdetails', (req, res) =>{
    const sql = "Select * from produktdetails";
    database.query(sql, (err, data) =>{
        if(err) {
            console.error('查询produktdetails出错:', err);
            return res.status(500).json(err);
        }
        return res.json(data);
    })
});

// 修复SQL参数绑定方式
app.get('/v1/produktdetails/:id',(req, res) =>{
    const sql = "Select * from produktattribute WHERE ProduktID=?";
    // 传入参数数组,防止SQL注入
    database.query(sql, [req.params.id], (err, data) =>{
        if(err) {
            console.error('查询produktattribute出错:', err);
            return res.status(500).json(err);
        }
        return res.json(data);
    })
});

app.listen(5137, ()=>{
    console.log('服务已启动,监听端口5137');
})
额外排查建议
  • 先确认MySQL服务是否正常运行:打开MySQL客户端,手动连接数据库并执行查询语句,看是否能正常返回数据。
  • 测试接口时先测不带参数的/v1/produktdetails,确认基础查询没问题后再测带参数的接口。
  • 查看Node.js控制台日志:修复后运行代码,控制台会打印连接状态和错误信息,方便定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:19:56