Nodejs发布请求变量范围问题

问题描述 投票:0回答:3

我对Node.js有点陌生。在下面的代码中,我从API获取数据。

request.post({ url:endpoint, form: requestParams }, function (err, response, body) {
    if (err) {
        console.log("Error = " + err);
    }
    else {
        let parsedBody = JSON.parse(body);
        if (parsedBody.error_description) {
            console.log("Error = " + parsedBody.error_description);
        }
        else {
            // testFunc(AccessToken);
            test = "Success!";
            testFunc(test);
        }
    }
});

function testFunc(success){
    Token = success;
    console.log(Token);
}

// this code gives the error "Token is not defined" \/
console.log(Token);

在发布请求中,我将变量设置为“ test”。我希望能够将其用作全局变量,以便可以在get请求中使用它。

[i console.log()“令牌”在“ testFunc”中时,它将正确记录。但是,当i console.log()在函数之外时,它将给出错误Token is not defined

如何获得全局的“令牌”或“测试”变量,以便可以在另一个get请求中使用它?

提前感谢!

node.js variables post scope global-variables
3个回答
0
投票

您的TokentestFunc上的局部变量

function testFunc(success){
    Token = success;
    console.log(Token);
}

尝试将Token定义为全局变量您可以在所有导入require(...)之后或在request.post

之后
let Token; //this is global declared variable

而且您的console.log也不能与您的代码一样

作为您的问题I want to be able to use this as a global variable so i can use it in a get request.

所以您需要将console.log放在request.get

类似

request.get('xxxxxx', , function(err) {
    console.log("Token is " , Token);
});



0
投票

您的request.post正在异步运行您可以使用request-promise lib

const request = require("request-promise"); 

并更改为

var result = await request(options);

或了解更多信息,请阅读此文章https://blog.risingstack.com/mastering-async-await-in-nodejs/


0
投票

使用global,您可以访问超出范围的变量值,请确保已使用global关键字分配了该值。

您可以使用global如下访问令牌:

request.post({ url:endpoint, form: requestParams }, function (err, response, body) {
    if (err) {
        console.log("Error = " + err);
    }
    else {
        let parsedBody = JSON.parse(body);
        if (parsedBody.error_description) {
            console.log("Error = " + parsedBody.error_description);
        }
        else {
            // testFunc(AccessToken);
            test = "Success!";
            testFunc(test);
        }
    }
});

function testFunc(success){
    global.Token = success;
    console.log(global.Token);
}

// this code will not give error now as "Token is not defined" 
console.log(global.Token);
© www.soinside.com 2019 - 2024. All rights reserved.