【问题标题】:Strange problem is occurring in node js (swapping request)node js中出现奇怪的问题(交换请求)
【发布时间】:2019-11-04 22:53:11
【问题描述】:

我使用 node js (express) 和 MySQL 创建了一个 Web 应用程序。这是一个 ERP 解决方案。

保存销售额时出现问题。

当从 2 个不同的系统同时向服务器发送 2 个请求时,其中一个正在获得正确的响应,另一个正在接收类似于第一个的响应。

假设 2 个人同时保存销售。第 1 个人的销售 id 是 10,第 2 个人的销售 id 是 11。

作为响应,第一个人得到了发票 10 的发票,但第二个人得到了 10 的发票详细信息,而他/她应该得到 11 的发票详细信息。

这个问题的可能原因是什么?

我的销售流程如下:

  1. 当用户保存销售时,它会返回一个销售 ID
  2. 通过 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


【解决方案1】:

很少有假设。但我不确定。 确实尝试在函数开始之后和“resolve()”之前编写“console.log”。

查看请求参数和结果。请注意 - 你真的用不同的参数处理2个请求吗 - 你真的收到 2 个请求吗(也许处理了 1 个请求并且你有某种缓存) - 你真的用不同的 id 向 DB 发出请求吗? - DB 真的返回相等/不相等的结果吗

【讨论】:

    【解决方案2】:

    我认为问题在于变量声明!

    当我在 getSalesById 中声明 json = {}; 时没有声明为全局变量的 `var。

    这可能是问题所在。我用var json = {}; 进行了更改,到目前为止问题还没有发生。


    感谢您的帮助,感谢您的努力 :)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多