Node.js接口返回旧MySQL数据:Postman无法获取新增用户
问题分析与解决方案
核心问题
- 数据仅初始化查询一次:服务启动时执行了一次
SELECT * FROM users,结果存入cevap变量后就不再更新,新增用户后接口返回的始终是启动时的旧数据。 - 数据库连接提前关闭:初始化查询完成后调用
baglanti.end()关闭了连接,后续无法再通过该连接查询最新数据。 - 接口未实时拉取数据:
POST /users接口直接返回缓存的旧数据,没有每次请求时重新查询数据库。
修改后的代码
将查询逻辑移至接口回调内,确保每次请求都获取最新数据,同时保留数据库连接:
const mysql = require('mysql'); const express = require('express'); const app = express(); const port = 3000; // 解析JSON请求体(用于接收新增用户的参数) app.use(express.json()); const baglanti = mysql.createConnection({ host: 'example', user: 'example', password: 'example', database: 'example' }); baglanti.connect(err => { if (err) throw err; console.log('数据库连接成功'); }); // 每次请求接口时实时查询最新用户数据 app.post('/users', (req, res) => { baglanti.query('SELECT * FROM users', (error, results) => { if (error) { console.error(error); return res.status(500).send('查询用户数据失败'); } res.send(results); }); }); app.listen(port, () => { console.log(`服务运行在端口 ${port}`); });
扩展:新增用户后实时返回全量数据
如果需要在同一个接口完成「新增用户+返回最新列表」的逻辑,可以修改为:
app.post('/users', (req, res) => { // 从请求体获取新增用户的参数 const newUser = req.body; // 插入新用户 baglanti.query('INSERT INTO users SET ?', newUser, (insertErr) => { if (insertErr) { console.error(insertErr); return res.status(500).send('新增用户失败'); } // 插入成功后查询最新用户列表 baglanti.query('SELECT * FROM users', (selectErr, results) => { if (selectErr) { console.error(selectErr); return res.status(500).send('查询用户列表失败'); } res.send(results); }); }); });
内容的提问来源于stack exchange,提问作者Efe Bostancı
相关产品推荐
相关产品推荐

