React Native通过Express访问MySQL数据库时遇返回undefined及服务器崩溃问题
我来帮你排查这个问题,咱们一步步拆解原因和对应的解决方案:
核心问题分析
你的Express服务器崩溃、前端拿到undefined,主要是后端代码的数据库连接和错误处理逻辑有问题,前端也有个小细节需要注意:
- 后端未处理连接错误:
connection.getConnection的回调里没处理err参数,如果数据库连接失败,直接会抛出未捕获异常导致服务器崩溃。 - 未释放数据库连接:获取到连接后,不管查询成功还是失败,都没调用
connection.release()把连接放回连接池,这会导致连接池耗尽,后续请求无法获取连接,最终服务器挂掉。 - 错误处理不当:
connection.query里直接throw error,没有通过响应把错误返回给前端,同时未捕获的异常会直接导致Express服务器崩溃。 - 前端的同步打印问题:你在
useEffect里直接console.log(data),此时setData是异步操作,还没完成状态更新,所以会打印初始的空数组,但这不是拿到undefined的主要原因。
修复后的后端代码(Route.js)
把后端代码改成这样,修复连接和错误处理的问题:
const express = require('express'); const mysql = require('mysql'); // 创建连接池 const connectionPool = mysql.createPool({ host: 'localhost', user: 'root', password: '', database: 'agora' }); const app = express(); app.get('/projets', (req, res) => { // 从连接池获取连接,处理连接错误 connectionPool.getConnection((err, conn) => { if (err) { console.error('数据库连接失败:', err); return res.status(500).json({ error: '数据库连接失败,请检查服务状态' }); } // 执行查询 conn.query('SELECT * FROM projet', (error, results) => { // 无论查询结果如何,都要释放连接回连接池 conn.release(); if (error) { console.error('数据查询失败:', error); return res.status(500).json({ error: '查询数据失败,请检查表结构和SQL语句' }); } // 返回JSON格式的查询结果 res.json(results); }); }); }); app.listen(3000, () => { console.log('服务器已启动,访问 http://localhost:3000/projets 查看数据'); });
前端代码的优化建议
前端可以加响应状态检查,同时监听data的变化来打印最新值:
const [data, setData] = useState([]); useEffect(() => { fetch('http://localhost:3000/projets') .then(response => { // 先检查HTTP响应是否成功 if (!response.ok) { throw new Error(`请求失败,状态码:${response.status}`); } return response.json(); }) .then(jsonData => { console.log('成功获取到数据:', jsonData); setData(jsonData); }) .catch(error => { console.error('请求出错:', error); }); }, []); // 监听data状态变化,打印更新后的数据 useEffect(() => { console.log('当前数据状态:', data); }, [data]);
额外注意事项
- 确保你的MySQL服务正在运行,数据库
agora和表projet存在,且字段名和你期望的一致(比如idProjet、nomProjet等)。 - 如果是React Native真机测试,
localhost无法访问本地服务器,需要替换成电脑的局域网IP地址(比如http://192.168.1.100:3000/projets,具体IP可以通过ipconfig或ifconfig查看)。
内容的提问来源于stack exchange,提问作者Kyoui
相关产品推荐
相关产品推荐

