如何从节点JS API调用返回字符串

时间:2018-10-21 18:16:50

标签: node.js

我使用的是一个代码段,该代码段在对api进行post rest调用后将返回一个值。

但是无论我在哪里调用该函数,它都不会返回值并显示未定义的内容。

每当我要调用getAccessToken()的任何地方时,它都会说不定,但是ifi打印出的值就是获取输出。

被调用者将如何获得返回值,我是否需要在以下代码中进行任何更改。 谢谢

var getAccessToken = exports.getAccessToken = function (res) { 
    // body...
	const request = require('request');
	const authKey='EAcEa4o4SkBLo9IpZpW4Y7oDn7d6b30GlouNh28pJ6Q='
	const ContentType='application/x-www-form-urlencoded' ;
	var postData={
		 'grant_type':'client_credentials'
	};
	const options = {  
	    url: 'https://xyz/v1/login',
	    method: 'POST',
	    headers: {
	        'Content-Type': ContentType,
	        'Authorization':authKey 
	     },
	    body:require('querystring').stringify(postData)
	};
	var token;
	request(options, function(errror, response, body) {  
		//console.log(JSON.parse(body));
       token= JSON.parse(body).access_token;
 });
	return token;
}

1 个答案:

答案 0 :(得分:2)

您的函数未返回任何内容。您可以使用async / await,promise或回调来修复它。

exports.getAccessToken = async (res) => {
  ...
  return await request(...)
}

OR

exports.getAccessToken = function(res) {
  ...
  return new Promise(function(resolve, reject) {
    ...
    request(options, function(errror, response, body) {
       var token = JSON.parse(body).access_token;
       resolve(token);
    }
  });
}

// Use it like
getAccessToken().then(function(token) { ... });

OR

exports.getAccessToken = function(res, cb) {
  ...
  request(options, function(errror, response, body) {
       var token = JSON.parse(body).access_token;
       cb(token);
    }
}

// Use it like
getAccessToken(res, function(token) { ... });