简体   繁体   English

如何访问本地 scope 中的全局变量?

[英]How do i access the global variable in local scope?

I am unable to access the global req_no and request_id variables inside sql.query blocks.我无法访问 sql.query 块中的全局 req_no 和 request_id 变量。 As a result the second query is sending empty values of req_no and request_id.因此,第二个查询正在发送 req_no 和 request_id 的空值。

I want to get the request_id, generate the req_no and update the req_no back to the db.我想获取 request_id,生成 req_no 并将 req_no 更新回数据库。 How do i implement this whole setup??我如何实现这整个设置?

router.route("/new").post((req, res) => {

  console.log(req.body);
  const request_zone = req.body.request_zone;
  const request_type = req.body.request_type;
  const requester_type = req.body.requester_type;
  const new_shipping_point = req.body.new_shipping_point;
  const request_flow = req.body.request_flow;
  const sales_order = req.body.sales_order;
  const old_value = req.body.old_value;
  const new_value = req.body.new_value;
  const requester_email = req.body.requester_email;
  const quotation = req.body.quotation;
  const request_reason = req.body.request_reason;
  const request_status = 1;
  const creation_date = null;
  const updation_date = null;
  const bot_status = "";
  const bot_comments = "";
  var req_no = "";
  const StatusFlag = 1;
  var request_id = "";
  const additional_notification_to = "";
  const additional_information = "";
  const approver = "";

  sqQuery =
    "insert into Request_Details " +
    "OUTPUT inserted.[Request_id] "+
    "values('" +
    req_no +
    "'," +
    request_zone +
    "," +
    request_type +
    "," +
    requester_type +
    "," +
    request_flow +
    ",'" +
    sales_order +
    "','" +
    requester_email +
    "','" +
    quotation +
    "'," +
    request_reason +
    "," +
    request_status +
    "," +
    creation_date +
    "," +
    updation_date +
    "," +
    StatusFlag +
    ",'" +
    bot_status +
    "','" +
    bot_comments +
    "','"+
    additional_notification_to +
    "','"+
    additional_information + 
    "','"+
    approver+
    "')";
  console.log(sqQuery);
  sql.query(connectionString, sqQuery, (err, rows) => {
    if (err != null) {
      console.log(err);
    } else {
      // console.log(rows);
      // console.log("DB Connected");
      request_id = rows[0].Request_id
      req_no = "REQ000" + request_id;
      console.log(rows);
      res.json("Data successfully added in Request Details Table");

      console.log(request_id);
      console.log(req_no);
    }
  });
  
  sqQuery=
        "update Request_Details set req_no='"+
        req_no +
        "' where request_id = " +
        request_id;
  console.log(sqQuery);
  sql.query(connectionString, sqQuery, (err, rows) => {
        if (err != null) {
          console.log(err);
        } else {
          // console.log(rows);
          // console.log("DB Connected");
          console.log("request number"+  req_no +" updated");
          res.json("Data successfully added in Request Details Table");
        }
  });

The simplest way to use your current sql library is to just nest the queries:使用当前 sql 库的最简单方法是嵌套查询:

router.route("/new").post((req, res) => {
    ....
    sql.query(connectionString, sqQuery1, (err, rows1) => {
       if (err) {
           console.log(err);
           res.sendStatus(500);
           return;
       }

       // prepare second query here using results of first

       sql.query(connectionString, sqQuery2, (err, rows2) => {
           if (err) {
               console.log(err);
               res.sendStatus(500);
               return;
           }
           
           // process second query results and build response

           res.json(...);
       });

    });
});

This way the second query doesn't start until the first query is done and can use its results in preparing the second query.这样,第二个查询在第一个查询完成之前不会开始,并且可以使用其结果来准备第二个查询。 Also, note you need error handling to log the error, send an error response and stop further processing after each query.此外,请注意您需要错误处理来记录错误、发送错误响应并在每次查询后停止进一步处理。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM