我有一个实用程序功能,该功能是从文件系统中读取私钥,然后创建一个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);
}
});
}
答案 0 :(得分:0)
回调的词法范围问题。尝试如下所示更改代码:
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
};
希望这可以解决问题。