Angular或Node.js在节点重启时将重复项插入Mysql

问题描述 投票:0回答:1

我的应用有用户输入数据,如出价或帖子。我注意到,如果我按预期投标,但如果节点服务器已关闭并重新打开,那么它会复制MySQL中的相同帖子。现在,如果我在一个会话中执行多个出价,然后关闭节点服务器,则它不会复制所有这些,而只是其中一些。

我注意到在我的网络选项卡中有一些待处理请求我做出的一些出价。重新启动节点服务器后,其中一些出价在此处重复。

这是一个Angular 6应用程序。我的有根据的猜测是Angular或节点没有满足某些东西,所以那些挂起的请求在重新启动时插入重复的数据。

任何可能导致这种情况的想法。我将提供代码以防万一

这是调用api的角度服务

placeBid(jobId, bidAmount: number, userId) {

const bidPayload = {
  jobId: jobId,
  userId: userId,
  bidAmount: bidAmount
};

this.http.post<{message: string}>('http://localhost:2200/api/jobs/place-bid', bidPayload).subscribe((responseData) => {
  console.log(responseData);
});

}

这是我的节点代码

 router.post("/place-bid/", checkAuth, (req, res, next) => {


pool.query(`
SELECT contractors.cont_id
FROM users
JOIN contractors on users.user_id = contractors.user_id
WHERE users.user_id = ${req.body.userId}
`, (err, results, fields) => {
let contId = results[0].cont_id;
console.log(contId);
  pool.query(`
  SELECT jobs.cust_id
  FROM jobs
  WHERE job_id = ${req.body.jobId}
  `, (custErr, custResults, custFields) => {
    console.log('cust results: ' + custResults);
    pool.query(`
    INSERT INTO bid(job_id, cont_id, cust_id, bid_amount) VALUES (${req.body.jobId},${results[0].cont_id},${custResults[0].cust_id}, ${req.body.bidAmount})
    `, (insertErr, insertResults, insertFields) => {
      console.log('Nested Results: ' + JSON.stringify(results));
    }
  )
  })


})


  });

对造成这种情况的原因感到困惑,但过去几天我一直在摸不着头脑。

编辑:我想我已将其缩小到待处理的请求。现在的情况是:

制作出价/帖子 - >服务器重启 - >重复出价/帖子

我注意到,如果我:

制作出价/帖子 - >刷新页面(删除待处理的请求) - >服务器重启 - >无重复

mysql node.js angular
1个回答
0
投票

我解决了!

如果查询已完成,请求未处理,我的请求没有响应。添加这些响应后,挂起已经消失,并且不再有任何重复

 res.status(200).json({
    message: 'Bid placed!'
  })
© www.soinside.com 2019 - 2024. All rights reserved.