代码之家  ›  专栏  ›  技术社区  ›  Wahrenheit Sucher

角度或节点.js在重新启动节点时将重复项插入Mysql

  •  0
  • Wahrenheit Sucher  · 技术社区  · 8 年前

    我的应用程序让用户输入出价或帖子等数据。我注意到,如果我提出了一个出价,所有工作的预期,但如果节点服务器是关闭和重新打开,然后它复制了相同的职位在MySQL。现在,如果我在一个会话中执行多个出价,然后关闭节点服务器,它不会复制所有出价,而只是复制其中的一部分。

    在重新启动节点服务器时,这里会复制一些出价。

    这是一个角度6应用程序。 我有根据的猜测是角度或者节点没有完成某个任务,所以在重新开始插入重复数据时,那些挂起的请求会被忽略。

    不知道是什么原因造成的。我会提供代码以防万一

    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));
        }
      )
      })
    
    
    })
    
    
      });
    

    我不知道是什么原因造成的,但这几天我一直在挠头。

    我想我已经把范围缩小到了未决的请求。目前的情况是:

    使投标/投递->服务器重新启动->投标/投递重复

    出价/投递->刷新页面(删除挂起的请求)->服务器重新启动->无重复

    1 回复  |  直到 8 年前
        1
  •  0
  •   Wahrenheit Sucher    8 年前

    我解决了!

    我的请求没有响应,查询已完成,请求挂起。 添加这些响应后,挂起的响应消失,不再有任何重复的响应

     res.status(200).json({
        message: 'Bid placed!'
      })