如何在 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);