我将如何做到这一点,以便可以在app.post函数之外引用变量名称,年龄和电话,以便可以在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);
现在编码的方式是错误“未定义变量”,但是如果在开始时声明它们,则不会获得任何值。
答案 0 :(得分:0)
我认为您对javascript的同步及其“异步”行为感到困惑。 app.post
进行“回调”。 “回调”是一个函数,在收到HTTP请求时,将在一定的时间范围内(视您的情况而定)进行调用。执行代码后,您的axios.post
函数将在回调传递给app.post
之前执行。因此data
中的所有键将永远不会被定义。 name, age, phone
从未在使用范围内声明。
我建议创建一个通用函数,该函数接受参数name, age, phone
并执行axios.post
逻辑。因此,您可以在每个app.post
上重用此功能。我在您可以执行的操作下面创建了一个代码段。它使用Promises和async/await来管理异步活动。
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);