如何在Node.js中使用POST响应的值?

时间:2019-06-13 13:36:35

标签: node.js api bearer-token

我正在通过Node.js建立API连接。我有一些预定义的cURL代码,我将其转换为Node.js代码,下面提供了这些代码。到目前为止,一切正常,我正在控制台窗口中显示所需的值(token

但是,我想知道如何在另一个函数中使用此token变量吗?因此,我不得不以某种方式将其保存为全局变量,但是直到现在,它还是行不通。

var request = require('request');

var headers = {
    'content-type': 'application/x-www-form-urlencoded',
    'Authorization': 'XXXXXXXXXXXXXXXXX'
};

var dataString = 'grant_type=client_credentials';

var options = {
    url: 'XXXXXXXXXXXXXXXX',
    method: 'POST',
    headers: headers,
    body: dataString
};

function callback(error, response, body) {
    if (!error && response.statusCode == 200) {
        var str = body;    
        token = str.split('\"')[3]; 
        console.log(token);
    }
}

request(options, callback);

1 个答案:

答案 0 :(得分:0)

仅当<p><br>How do you feel?</p> <form action="mailto:@hotmail.com" enctype="text/plain" method="post"> I'm feeling:<br> <input name="I'm feeling" type="radio" value="Nervous"> Nervous. <br> <input name="I'm feeling" type="radio" value="Happy"> Happy. <br> <input type="submit" value="Send"><br> </form> 完成并调用token函数时,您才能访问request()。这是由于node.js的non-blocking性质所致-当您启动一个请求时,代码不会被阻塞,并且只有在请求完成后才可以访问其响应并调用回调函数。因此,您首先定义回调函数,并将其作为参数传递给request。如果要访问令牌,则可以创建另一个函数并在回调中调用它。

callback

您也可以使用promise以获得更好的代码:

var request = require('request');

var headers = ...
var dataString = ...
var options = ...

function doStuffWithToken(token) {
    console.log(token)
}

function callback(error, response, body) {
    if (!error && response.statusCode == 200) {
        var str = body;    
        token = str.split('\"')[3]; 
        doStuffWithToken(token);
    }
}

request(options, callback);

在这里,我们围绕请求创建了一个包装器。 getToken()返回一个promise对象,您可以使用该对象注册两个处理程序,以了解何时成功解析,何时拒绝并引发错误。

您还可以将getToken()与await / async关键字一起使用

var request = require('request');

function getToken() {
    var headers = ...
    var dataString = ...
    var options = ...

    return new Promise((resolve, reject) => {
        request(options, (error, response, body) => {
            if (error) return reject(error)
            if (response.statusCode == 200) {
                var str = body;    
                token = str.split('\"')[3]; 
                resolve(token);
            }
        }
    }
}

getToken()
    .then((token) => {
        // here you can access the token
        console.log(token)
    })
    .catch((error) => {
        console.error('unable to retrieve token', error)
    })

更多读数: Don't block the event loop