如何在 post 函数之外使用变量?
How can I use a variable outside the post function?
我该怎么做才能在 app.post 函数之外引用我的变量名称、年龄和 phone,这样我就可以在我的 const 数据中使用它们并在 axios.post指令?
我试过在一开始就声明它们,但没有成功。没有得到任何值。
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const port = process.env.PORT || 3000;
const ip = process.env.IP || "127.0.0.1";
const axios = require("axios");
//
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(bodyParser.json());
//
app.post('/', function (req, res) {
const name = req.body.queryResult.parameters.name;
const age = req.body.queryResult.parameters.age;
const phone = req.body.queryResult.parameters.phone;
//
res.json(response);
});
const data = [{
"Name": name,
"Age": age,
"Phone": phone
}];
axios.post('https://sheet.best/api/sheets/5296b88f-a7c9-57c2-accc-f445cf323c5e', data);
app.listen(port, ip);
现在编码方式出现错误"variable is not defined",但如果我在开头声明它们,则不会获得任何值。
我认为您对 javascript 的同步及其 'asynchronous' 行为感到困惑。 app.post
需要一个 'callback'。 'callback' 是一个将在一定时间内调用的函数,在您的情况下……当您收到 HTTP 请求时。当您的代码被执行时,您的 axios.post
函数将在回调传递给 app.post
之前执行。所以 data
中的所有键将永远不会被定义...更不用说变量了; name, age, phone
永远不会在它们正在使用的范围内声明。
我建议创建一个接受参数 name, age, phone
并执行 axios.post
逻辑的通用函数。因此,您可以在每个 app.post
上重复使用此函数。我在下面创建了您可以执行的操作的代码片段。它使用 Promises and async/await 来管理异步 activity。
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const port = process.env.PORT || 3000;
const ip = process.env.IP || "127.0.0.1";
const axios = require("axios");
app.use(
bodyParser.urlencoded({
extended: false
})
);
app.use(bodyParser.json());
async function postData(name, age, phone) {
const data = [
{
Name: name,
Age: age,
Phone: phone
}
];
const result = await axios.post(
"https://sheet.best/api/sheets/5296b88f-a7c9-57c2-accc-f445cf323c5e",
data
);
return result;
}
app.post("/", async function(req, res) {
const name = req.body.queryResult.parameters.name;
const age = req.body.queryResult.parameters.age;
const phone = req.body.queryResult.parameters.phone;
const result = await postData(name, age, phone);
return res.json(result);
});
app.listen(port, ip);
我该怎么做才能在 app.post 函数之外引用我的变量名称、年龄和 phone,这样我就可以在我的 const 数据中使用它们并在 axios.post指令?
我试过在一开始就声明它们,但没有成功。没有得到任何值。
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const port = process.env.PORT || 3000;
const ip = process.env.IP || "127.0.0.1";
const axios = require("axios");
//
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(bodyParser.json());
//
app.post('/', function (req, res) {
const name = req.body.queryResult.parameters.name;
const age = req.body.queryResult.parameters.age;
const phone = req.body.queryResult.parameters.phone;
//
res.json(response);
});
const data = [{
"Name": name,
"Age": age,
"Phone": phone
}];
axios.post('https://sheet.best/api/sheets/5296b88f-a7c9-57c2-accc-f445cf323c5e', data);
app.listen(port, ip);
现在编码方式出现错误"variable is not defined",但如果我在开头声明它们,则不会获得任何值。
我认为您对 javascript 的同步及其 'asynchronous' 行为感到困惑。 app.post
需要一个 'callback'。 'callback' 是一个将在一定时间内调用的函数,在您的情况下……当您收到 HTTP 请求时。当您的代码被执行时,您的 axios.post
函数将在回调传递给 app.post
之前执行。所以 data
中的所有键将永远不会被定义...更不用说变量了; name, age, phone
永远不会在它们正在使用的范围内声明。
我建议创建一个接受参数 name, age, phone
并执行 axios.post
逻辑的通用函数。因此,您可以在每个 app.post
上重复使用此函数。我在下面创建了您可以执行的操作的代码片段。它使用 Promises and async/await 来管理异步 activity。
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const port = process.env.PORT || 3000;
const ip = process.env.IP || "127.0.0.1";
const axios = require("axios");
app.use(
bodyParser.urlencoded({
extended: false
})
);
app.use(bodyParser.json());
async function postData(name, age, phone) {
const data = [
{
Name: name,
Age: age,
Phone: phone
}
];
const result = await axios.post(
"https://sheet.best/api/sheets/5296b88f-a7c9-57c2-accc-f445cf323c5e",
data
);
return result;
}
app.post("/", async function(req, res) {
const name = req.body.queryResult.parameters.name;
const age = req.body.queryResult.parameters.age;
const phone = req.body.queryResult.parameters.phone;
const result = await postData(name, age, phone);
return res.json(result);
});
app.listen(port, ip);