我是 Node.JS 的新手,所以这可能是一个微不足道的问题,但我花了几个小时研究它,但没有找到任何解决方案。 问题。 Node.JS 中的 MySQL 查询自服务器启动以来始终返回相同的数据集,无论我如何更改数据库。重新启动服务器后,它开始返回正确的数据,直到我再次更新它们。即,数据集自启动以来从未改变。
POST 更新表,GET 获取数据集,但始终是旧数据。尝试通过 POST 和 MySQL Workbench 更新,总是一样的。
我想,是因为我没有结束连接。经过一番研究,我在每个查询后添加了 con.end() 行,但仍然没有帮助
这是我的 db_connector.js 模块:
var mysql = require('mysql');
module.exports = {
resSet: function(callback) {
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "pass",
database: "applocator"
});
con.query("SELECT * FROM locations",
function (err, rows) {
//here we return the results of the query
callback(err, rows);
}
);
con.end();
},
resUpd: function(id, lat, long){
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "pass",
database: "applocator"
});
con.connect(function(err) {
if (err) throw err;
var sql = "UPDATE locations SET latitude = "+lat+", longitude =
"+long+" WHERE id = "+id;
console.log(sql);
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result.affectedRows + " record(s) updated");
});
});
con.end();
}
}
它导出两个函数,一个用于获取数据集,一个用于更新数据集。
我在 server.js 中以这种方式使用它:
var app = express();
app.use(allowCrossDomain);
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.post('/',function(req,res){
query.resUpd(req.body.id,req.body.lat,req.body.long)
console.log(req.body);
res.send("Success");
});
query.resSet(function (err, myRes){
app.get('*', (req, res) =>
res.status(200).send(JSON.stringify(myRes)));
})
app.listen(3000);
更新后我必须获取更新的数据集,但我总是获取旧数据集,就像我没有对表进行任何更新一样。 我的问题是什么?我将非常感谢您的回复。
最佳答案
服务器返回过时的数据,因为您在 mysql select
查询触发的回调中注册了 app.get('*' ...)
处理程序。反之亦然,所以在 server.js
中尝试更改:
query.resSet(function (err, myRes){
app.get('*', (req, res) =>
res.status(200).send(JSON.stringify(myRes)));
})
进入
app.get('*', (req, res) => {
query.resSet(function (err, myRes) {
res.status(200).send(JSON.stringify(myRes));
})
})
关于javascript - Node.JS 中的 MySQL 请求总是返回旧数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57440864/