将POST标记保存在函数- NODE JS的变量中

gr8qqesn  于 2022-11-29  发布在  Node.js
关注(0)|答案(1)|浏览(120)

我刚开始学习 NodeJS ,我有一个疑问,要把返回的token保存在变量中,在另一个函数中使用它,比如做GET。
我习惯了Python,在Python中我可以返回一个值,然后用函数声明一个新变量,它会将返回值保存在该变量中,但我发现在NODE JS中它不是这样工作的。
它应该是简单的,但我正在学习它仍然有点混乱,我看到它有一些有关的“等待”计划。
我甚至做了一个简单的测试,比如用“Await”创建另一个函数,然后运行该函数,它正确地显示了该标记,但我希望该标记在一个变量中,正如我前面所说的,以便在未来的GET中使用该标记。

var axios = require("axios")


async function getToken(){
    var response = await axios.post('https://url',{ 
        'grant_type':'client_credentials',
        'client_secret': 'client secret',
        'client_id': 'client id'},{
        headers: 
        {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept-Charset': 'UTF-8'
        }
        
        })
        return response.data.access_token;

       
}

async function test(){
    var token = await getToken();
    
}

test();
jpfvwuh4

jpfvwuh41#

async - await关键字模式与箭头函数表达式在node.js中更加清晰。它是异步的,基于承诺的行为,因此代码可以编写得更加清晰,并避免承诺链(如新的Promise/than模式)。

此演示代码是axios.post使用本地运行Keycloak令牌服务器调用www.example.com示例

它赋给一个变量token并打印它。

const axios = require("axios")

const getToken = async () => {
    const response = await axios.post('http://localhost:8080/auth/realms/example/protocol/openid-connect/token',
        new URLSearchParams({
            'grant_type': 'client_credentials',
            'client_secret': 'D0caHQ0Z1Z8eR1EjzfOtAXarPiYzBkLQ',
            'client_id': 'test'
        }),
        {
            headers:
            {
                'Content-Type': 'application/x-www-form-urlencoded',
                'Accept-Charset': 'UTF-8'
            }
        })
    return response.data.access_token
}

const test = async () => {
    const token = await getToken()
    console.log("access token: " + token)
}

test()

结果

$ node get-token.js
access token: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJGSjg2R2NGM2pUYk5MT2NvNE52WmtVQ0lVbWZZQ3FvcXRPUWVNZmJoTmxFIn0.eyJleHAiOjE2Njk1MTAzNDQ
sImlhdCI6MTY2OTUwNjc0NCwianRpIjoiYTliNTM1NWItZGVlNi00OWExLTkzYmEtYmM1Y2YwMzUzYWU0IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL2V4YW1wbGUi
LCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNDdjM2M0NjYtNmE2Ny00ZmFiLTk2YTMtNGJiMTdlOWYxZWI1IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdCIsImFjciI6IjEiLCJhbGxvd2VkLW9ya
WdpbnMiOlsiaHR0cDovL2xvY2FsaG9zdDozMDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsImRlZmF1bHQtcm9sZXMtZXhhbXBsZSIsInVtYV9hdXRob3Jpem
F0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGU
iOiJwcm9maWxlIGVtYWlsIiwiY2xpZW50SG9zdCI6IjE3Mi4xOS4wLjEiLCJjbGllbnRJZCI6InRlc3QiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZp
Y2UtYWNjb3VudC10ZXN0IiwiY2xpZW50QWRkcmVzcyI6IjE3Mi4xOS4wLjEifQ.eoHuLlSIlCMTk5LvIVpzMJG5qdPgiY5bvYkAceKELvB-46n4H5ib4DptxkC1JoP-2tQmvbik2x0ECgL4mBMLJg
_F_6gltbhT4wguX4vZcO2VS-BtvJbYFti_-Tfqw_w_YfP-6sv3eYuQVBhvObQclv05t4F30JGpKnh7a8hrvO0

同样的POST API调用的 Postman 调用的屏幕截图。x1c 0d1x

参考

Asynchronous Patterns in Node.js
Arrow function expressions

相关问题