【问题标题】:Better way to do this with Node.js, Express, and MySQL?使用 Node.js、Express 和 MySQL 的更好方法是什么?
【发布时间】:2020-03-16 13:54:07
【问题描述】:

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


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()

})

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

【问题讨论】:

  • 使用模型怎么样?
  • @Eitank 使用 MySQL?我以为那只是 mongodb。

标签: javascript mysql node.js linux express


【解决方案1】:

这里有一堆建议。

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

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)

假设您的更新列定义为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

这使您可以在需要时重建更新的历史记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2011-10-30
    • 2017-12-01
    • 2014-05-03
    • 2019-11-17
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多