Функция NodeJs не может вернуть ответный вызов - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть служебная функция, которая читает секретный ключ из файловой системы и затем создает токен JWT,
Код может прочитать файл и создать токен,
Но он не может отозвать вызывающую функцию,
ошибки также нет.

Ниже приведен код функции -

let async = require('async');
let fs   = require('fs');
let path   = require('path');
let jwt = require('jsonwebtoken');

module.exports = {
    createToken
};

const TAG = '[COMMON-UTIL->';

function createToken(constants, payload, options, keyName, callback){
    const METHOD_TAG = TAG + 'createToken]->';

        async.waterfall([
            function(callback) {
                let keyPath = 'somePathHere';

                fs.readFile(keyPath, 'utf8', function(err, privateKey) {
                    if(err){
                        callback(err, null);
                    }
                    else{
                        callback(null, privateKey);
                    }
                });
            },
            function(privateKey, callback) {
                jwt.sign(payload, privateKey, options, function(err, token) {
                    if(err){
                        console.log(METHOD_TAG, err);
                        callback(err, null);
                    }
                    else{
                        callback(null, token);
                    }
                });
            }
        ],
        function(err, token) {
            if (err) {
                console.log(METHOD_TAG, err);
                callback(err, null);
            } 
            else {
                callback(null, token);
            }
        });
}

1 Ответ

0 голосов
/ 25 апреля 2019

Лексическая область действия для обратного вызова.Попробуйте изменить код, как показано ниже:

const async = require('async');
const fs = require('fs');
const path = require('path');
const jwt = require('jsonwebtoken');

// const TAG = '[COMMON-UTIL->';
// const METHOD_TAG = TAG + 'createToken]->';

let createToken = (constants, payload, options, keyName, callback) => {
    async.waterfall([
        (async_callback) => {
            let keyPath = 'somePathHere';
            fs.readFile(keyPath, 'utf8', (err, privateKey) => {
                if (!err) {
                    async_callback(null, privateKey);
                } else {
                    async_callback(err);
                }
            });
        },
        (privateKey, async_callback) => {
            jwt.sign(payload, privateKey, options, (err, token) => {
                if (!err) {
                    async_callback(null, token);
                } else {
                    async_callback(err);
                }
            });
        }
    ], (err, token) => {
        callback(err, token);
    });
};


module.exports = {
    createToken
};

Надеюсь, это решит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...