javascript - Node.JS 中的 MySQL 请求总是返回旧数据集

标签 javascript mysql node.js express

我是 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/

相关文章:

javascript - 我应该使用什么语言来构建小型 Costing 应用程序?

javascript - 返回 "then"内具有 "Promise.then()"函数的对象

node.js - 在每个请求中传递一个变量以查看,Node.js Express

PHP 用户名逻辑不起作用

javascript - 为什么我不能在Nightmare.evaluate()中使用我的类(class)?

javascript 重试异步等待

javascript - 绑定(bind)列表未显示在 Knockout.js 的 html 查看源代码中?

javascript - NEXT.js 同构-unfetch 出错

php - MySQL COUNT(*) 返回空结果集

mysql - 选择行匹配计算