首页 > 解决方案 > 使用 Node.js、Express 和 MySQL 的更好方法是什么?

问题描述

所以我想知道是否有人有更好的方法来解决我的问题。基本上我想要一条记录在我插入数据库的记录中。我的意思是,我需要在更新时记录对记录所做的所有更改。因此,每当更新记录时,我都会将信息保存在“更新”列中。每次有更新时,我都会从该记录中选择更新,将新信息连接到旧更新上并插入它。请参阅下面的代码。


app.post("/updateRecord", function(req,res){
  var prevResultUpdates = "";
  async function first(){
    con.query("SELECT * FROM Equipment WHERE Serial="+req.body.serial+" AND Part="+req.body.part, function(err,result,fields){
      if (err) throw err;
      console.log(result[0]['Updates'])
      return prevResultUpdates= prevResultUpdates + "," + result[0]['Updates']

    });
  }
  async function second(){
    await first();
    var customer = req.body.customer;
    var update = "\'" + prevResultUpdates + ',' + req.body.update + "," + Number(Date.now()) + "," + req.body.customer + ',' +"\'";
    var serial = req.body.serial;
    var part = req.body.part;
    var sql="Update `Equipment` SET `Customer`= '"+customer+"', `Updates`="+update+" WHERE Serial=" + serial + " AND Part=" + part;
    con.query(sql,function(err,result,fields){
      if (err) throw err;
      res.json(result)
    })
  }
  second();

  res.end()

})

关于如何更好地做到这一点的任何想法?

标签: javascriptmysqlnode.jslinuxexpress

解决方案


这里有一堆建议。

首先,像这样在表中添加一列:

last_change TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

它总是会自动包含每行上最近一次 INSERT 或 UPDATE 操作的时间,而无需您在 SQL 中提及它。

其次,请注意

UPDATE Equipment SET Updates = Updates + ' some text string' 

作品。您可以就地更改列,而无需获取其以前的值。但是,当列太长时,这可能会失败。所以,改为这样做。

UPDATE Equipment SET Updates = RIGHT(Updates + ' some text string', 255)

假设您的 Updates 列定义为VARCHAR(255). 我使用RIGHT()而不是LEFT()因为大概最近的更新是最有趣的。

第三,您可能明智地对此进行规范化,添加一个Equipment_history表格。不要将更新日志附加到列,而是将新行插入Equipment_history. 该表可能有这些列

equipment_history_id  INT          primary key
equipment_id          INT          foreign key to Equipment table
customer              VARCHAR(255) identity of the customer 
update                VARCHAR(255) reason for update
last_change           TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

如果需要,这使您可以重建更新的历史记录。


推荐阅读