我正在通过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);
答案 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)
})