javascript - 如何从带有承诺的javascript文件中提取字符串?
问题描述
我有一个 node.js 应用程序,其中包含一些我正在使用的文件,但主要的两个 javascript 文件是 RestController 和 AuthController。RestController 应该调用 AuthController 从 Salesforce(我试图访问的服务器)中提取新的访问令牌。
我目前将我的 AuthController.js 设置为使用 Promise,以便我可以等待获取我的访问令牌。问题是我不知道如何让我的 RestController.js 文件等待来自 AuthController.js 文件的访问令牌。
我对 Javascript 和 Promises 也很陌生,所以我不确定我是否正确设置了我的函数。基本上,我希望我的 AuthController 处理获取访问令牌和 RestController 处理对我们服务器的 Rest 请求。
AuthController.js
var fs = require('fs');
var jwt = require('jsonwebtoken');
var request = require('request');
var querystring = require('querystring');
var config = require('../../configs/config.json');
var filename = __dirname + '/../../' + config.key_path;
var access_token;
var readFilePromise = function(file) {
return new Promise(function(ok, notOk) {
fs.readFile(file, function(err,data) {
if (err) {
notOk(err);
} else {
ok(data);
}
});
});
}
var getAccessToken = function(key) {
return new Promise(function(ok,notOk) {
var jwtparams = {
iss : config.client_id,
sub: config.username,
aud: 'https://' + config.host,
exp : Date.now() + 300
};
var token = jwt.sign(jwtparams, key, {algorithm: 'RS256'});
var data = querystring.stringify({
grant_type : 'urn:ietf:params:oauth:grant-type:jwt-bearer',
assertion : token
});
request.post({
headers: {
'Content-Type' : 'application/x-www-form-urlencoded',
'Content-Length' : data.length
},
url: 'https://' + config.host + '/services/oauth2/token',
body: data
}, function(error, response, body) {
if (error) {
return notOk(error);
}
try {
ok(JSON.parse(body).access_token);
} catch (e) {
notOk(e);
}
});
});
}
function main() {
readFilePromise(filename).then(function(data) {
getAccessToken(data.toString()).then(function(data) {
access_token = data.toString();
});
});
}
module.exports = {main};
RestController.js
var https = require('https');
var request = require('request');
var auth = require('./authController.js');
class SystemController {
doProcessPostStatus (req,res) {
if (!req.body.systemId) {
return res.status(400).send([
{
'errorCode' : 'INVALID_REQUEST_BODY',
'message' : 'System Id "systemId" variable is required.'
}
]);
} else if (typeof req.body.success === 'undefined') {
return res.status(400).send([
{
'errorCode' : 'INVALID_REQUEST_BODY',
'message' : 'Success "success" variable is required'
}
]);
} else if (!req.body.message) {
return res.status(400).send([
{
'errorCode' : 'INVALID_REQUEST_BODY',
'message' : 'Message "message" variable is required'
}
]);
}
var access_token = auth.main();
console.log(access_token);
}
}
var systemControllerVar = new SystemController();
module.exports = systemControllerVar;
非常感谢任何帮助,因为我目前陷入困境,谢谢!
解决方案
推荐阅读
- firefox-addon-webextensions - 浏览器扩展:获取当前标签 URL 的最低权限
- java - 如何在另一个类适配器中访问给定适配器的 onBindViewHolder 项?
- android - 在后台操作成功时将 Native App 反应到前台
- amazon-web-services - DMS 是否支持 Oracle 到 Microsoft SQL 服务器?
- excel - VBA - MSXML2.XMLHTTP - 在 GITHUB 上传递凭证
- google-analytics - 谷歌分析目标作为谷歌标签管理器中的触发器
- java - 如何在 WebDriver 中遵循重定向
- php - 如何从 laravel nova 资源过滤器下拉列表中隐藏每页选项?
- symfony - 资产是从散列路径加载的,而不是从 manifest.json 加载的
- python - Django如何一次创建多个模型对象-共享除一个之外的所有值