Javascript 如何访问局部范围中的全局变量?
我无法访问sql.query块中的全局req_no和request_id变量。 因此,第二个查询将发送req_no和request_id的空值 我想获取请求id,生成请求号,并将请求号更新回数据库。 如何实现整个设置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
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中工作。