【发布时间】:2019-11-04 22:53:11
【问题描述】:
我使用 node js (express) 和 MySQL 创建了一个 Web 应用程序。这是一个 ERP 解决方案。
保存销售额时出现问题。
当从 2 个不同的系统同时向服务器发送 2 个请求时,其中一个正在获得正确的响应,另一个正在接收类似于第一个的响应。
假设 2 个人同时保存销售。第 1 个人的销售 id 是 10,第 2 个人的销售 id 是 11。
作为响应,第一个人得到了发票 10 的发票,但第二个人得到了 10 的发票详细信息,而他/她应该得到 11 的发票详细信息。
这个问题的可能原因是什么?
我的销售流程如下:
- 当用户保存销售时,它会返回一个销售 ID。
- 通过 sales id 再次发出请求以获取该销售的详细信息。
保存数据没有问题。
但是当我得到销售细节时,它就搞砸了。
这是销售路线:
router.route('sales/:id')
.get(async function (req, res, next) {
let json = {};
let report = new ReportObj(req.conn);
let dbs_name = req.session.main_db;
try {
json = await report.getSalesById({
dbs_name,
ids: req.params.id
});
res.send(json);
} catch (e) {
next(e);
}
});
并且这是 getSalesById 函数:
this.getSalesById = function (sendData) {
// console.log(sendData);
return new Promise(function (resolve, reject) {
json = {};
var select_header_with_date_sql = `SELECT
...
FROM sales_entry_header seh
LEFT JOIN customers c ON c.id = seh.customer_id
LEFT JOIN form_type ft On ft.id = c.form_type
LEFT JOIN state_list s ON s.id = c.state
LEFT JOIN \`${sendData.dbs_name}\`.users u ON u.id = seh.user_sold
WHERE seh.id = ?`;
conn.query(select_header_with_date_sql, [sendData.ids], function (err, result) {
if (err) {
resolve({
status: 'error',
message: 'Error',
debug: err
});
} else {
if (result.length > 0) {
json = result[0];
var details_sql = `SELECT
...
FROM sales_entry_details sed
LEFT JOIN products p ON p.\`product-id\` = sed.product_id
LEFT JOIN hsn h ON h.id = p.hsn
LEFT JOIN unit_type u ON u.id = p.\`unit-type\`
LEFT JOIN purchase_entry_details ped ON ped.id = sed.batch_no
LEFT JOIN salesman sm ON sm.id = sed.salesman
WHERE sed.sales_entry_header_id = ?`;
conn.query(details_sql, [json.sales_id], function (err, details_result) {
if (err) {
resolve({
status: 'error',
message: 'Error',
debug: err
});
} else {
json.items = details_result.map(function (obj) {
obj.available_qty = obj.unit_purchase - obj.unit_sale + +obj.unit_sale_return - obj.unit_purchase_return + +obj.qty;
obj.return_available_qty = obj.unit_sale - obj.unit_sale_return;
return obj;
});
resolve(json);
}
});
} else {
resolve({
status: "error",
message: "No sales selected"
});
}
}
});
});
};
【问题讨论】:
-
请添加一些代码或小提琴。
-
@AbhishekMani 我已经按照你的要求添加了代码!
-
请添加您的保存功能?
-
请创建一个最小可重现示例。检查此链接以获取帮助 - stackoverflow.com/help/minimal-reproducible-example
-
如何创建与数据库的连接?你是重用现有的连接,还是使用连接池?
标签: mysql node.js express routing