Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何访问局部范围中的全局变量?_Javascript_Node.js_Reactjs_Express - Fatal编程技术网

Javascript 如何访问局部范围中的全局变量?

Javascript 如何访问局部范围中的全局变量?,javascript,node.js,reactjs,express,Javascript,Node.js,Reactjs,Express,我无法访问sql.query块中的全局req_no和request_id变量。 因此,第二个查询将发送req_no和request_id的空值 我想获取请求id,生成请求号,并将请求号更新回数据库。 如何实现整个设置 router.route("/new").post((req, res) => { console.log(req.body); const request_zone = req.body.request_zone; const reques

我无法访问sql.query块中的全局req_no和request_id变量。 因此,第二个查询将发送req_no和request_id的空值

我想获取请求id,生成请求号,并将请求号更新回数据库。 如何实现整个设置

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

使用当前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(...);
       });

    });
});

这样,第二个查询在第一个查询完成之前不会启动,并且可以在准备第二个查询时使用其结果。另外,请注意,您需要错误处理来记录错误、发送错误响应并在每次查询后停止进一步处理。

您不了解非阻塞、异步
sql.query()
调用是如何工作的,因此您试图使用局部变量(非全局变量)名为
req\u no
,然后由上一个异步回调填充其值。因此,这是一个代码计时和代码结构的问题,解决这些问题需要学习异步编程如何在Javascript中工作。