Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用承诺从javascript文件中提取字符串?_Javascript_Node.js_Rest_Promise - Fatal编程技术网

如何使用承诺从javascript文件中提取字符串?

如何使用承诺从javascript文件中提取字符串?,javascript,node.js,rest,promise,Javascript,Node.js,Rest,Promise,我有一个node.js应用程序,其中有几个我正在使用的文件,但主要的两个javascript文件是RestController和AuthController。RestController应该调用AuthController从Salesforce(我正试图访问的服务器)中提取一个新的访问令牌 目前,我将AuthController.js设置为使用Promissions,以便我可以等待获取访问令牌。问题是我不知道如何让RestController.js文件等待AuthController.js文件中

我有一个node.js应用程序,其中有几个我正在使用的文件,但主要的两个javascript文件是RestController和AuthController。RestController应该调用AuthController从Salesforce(我正试图访问的服务器)中提取一个新的访问令牌

目前,我将AuthController.js设置为使用Promissions,以便我可以等待获取访问令牌。问题是我不知道如何让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};
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;
RestController.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};
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;

非常感谢您的帮助,因为我现在被卡住了,谢谢

你有什么错误或问题?承诺的一件事是避免厄运金字塔。。。在
main
中展平代码:pLike@JaromandaX说你应该这样做。您需要避免使用全局
access\u token
变量。相反,从
main()
返回满足该值的承诺,然后在
SystemController
中使用
auth.main().then(console.log)
。啊。这是你的问题吗我遇到的问题是,我需要能够访问“access_token”属性,或者将其返回到正在调用它的RestController.js函数,但我一直没有定义。您遇到的错误或问题是什么?承诺的一件事是避免回调金字塔的厄运。。。在
main
中展平代码:pLike@JaromandaX说你应该这样做。您需要避免使用全局
access\u token
变量。相反,从
main()
返回满足该值的承诺,然后在
SystemController
中使用
auth.main().then(console.log)
。啊。这是你的问题吗我遇到的问题是,我需要能够访问“access_token”属性,或者将其返回给调用它的RestController.js函数,但我一直没有定义它。