我的应用中,用户输入了出价或帖子等数据。我注意到,如果我出价了,那么所有的工作都按预期进行,但是如果节点服务器关闭并重新打开,则它将在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));
}
)
})
})
});
对造成这种情况的原因感到困惑,但过去几天我一直在挠头。
编辑:我想我已将其范围缩小为待处理的请求。现在的场景是:
进行出价/发布->重新启动服务器->出价/发布重复
我注意到,如果我:
进行投标/发布->刷新页面(删除待处理的请求)->服务器重启->无重复
答案 0 :(得分:0)
我解决了!
我的请求没有响应,因为查询已完成使请求挂起。 添加了这些响应后,待处理项就消失了,不再有重复项
res.status(200).json({
message: 'Bid placed!'
})