回调不是函数 - JSON 文件读取
callback is not a funcion - JSON file read
我做了一些研究,但我得到的所有回复都没有解决我的问题。
基本上,我有以下代码:
public static load(lang: string, staReplace: boolean, callback?: (message: string, error?: string) => void) {
if (!TranslateSingleton.languageFile) {
TranslateSingleton.languageFile = new Map<string, Object>();
}
lang = lang.toLowerCase();
if (!TranslateSingleton.languageFile.has(lang) || staReplace === true) {
try {
let strBody: string = fs.readFileSync(AppConfig.APP_SERVER_DIRETORIO + '/languages/language-' + lang + '.json', 'utf8')
TranslateSingleton.languageFile.set(lang, JSON.parse(strBody));
callback('OK', null);
} catch (ex) {
AppLog.error('IDIOMA NÃO ENCONTRADO ==>', AppConfig.APP_SERVER_DIRETORIO + '/languages/language-' + lang + '.json');
callback(null, '## IDIOMA [' + lang + '] não disponível! ##');
}
}
}
并且当 'load' 函数被调用时,我总是得到响应:
1) 在 TS TranslateSingleton 文件中:
TranslateSingleton.load(lang, false, null);
2) 在另一个控制器中:
TranslateSingleton.load(resultToken.lang, true, (resultMessage, errorMessage) => {
if (errorMessage) {
resolve(super.trataErro(res, errorMessage));
} else {
resolve(super.trataRetorno(req, res, resultMessage));
}
});
然后,我的回复:
[2020-06-10T11:47:06.257] [ERROR] default - [APPLOG] IDIOMA NÃO ENCONTRADO ==> [ './../languages/language-pt-br.json' ]
[2020-06-10T11:47:06.259] [ERROR] default - [APPLOG] Erro ao recuperar a chave: "AUDITORIA.REGISTRO_AUDITORIA", [ TypeError: callback is not a function
at Function.TranslateSingleton.load (C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\bin\util\translate.js:24:17)
at TranslateSingleton.__ (C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\bin\util\translate.js:44:32)
at C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\bin\service\auditoria.service.js:423:62
at C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\bin\service\base\base.service.js:374:29
at custExecuteCb (C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\node_modules\oracledb\lib\connection.js:182:7) ]
谁能给我一个启发?
我想您在这行代码中遇到了错误:
TranslateSingleton.load(lang, false, null);
这里你基本上传递了 null
作为 callback
参数的参数。
在第 callback('OK', null)
行的函数体内,它会尝试调用或调用您作为回调参数传递的函数。由于您的参数是 null
,它无法调用,因为 null
不是函数,因此它会抛出错误。
通过执行以下步骤解决了这个问题:
1) 更改了调用函数
TranslateSingleton.load(lang, false, (a, b) => { });
2) 更改了根目录的路径(仅适用于开发实例)
珠三角 -> ./
开发 -> ./../
我做了一些研究,但我得到的所有回复都没有解决我的问题。 基本上,我有以下代码:
public static load(lang: string, staReplace: boolean, callback?: (message: string, error?: string) => void) {
if (!TranslateSingleton.languageFile) {
TranslateSingleton.languageFile = new Map<string, Object>();
}
lang = lang.toLowerCase();
if (!TranslateSingleton.languageFile.has(lang) || staReplace === true) {
try {
let strBody: string = fs.readFileSync(AppConfig.APP_SERVER_DIRETORIO + '/languages/language-' + lang + '.json', 'utf8')
TranslateSingleton.languageFile.set(lang, JSON.parse(strBody));
callback('OK', null);
} catch (ex) {
AppLog.error('IDIOMA NÃO ENCONTRADO ==>', AppConfig.APP_SERVER_DIRETORIO + '/languages/language-' + lang + '.json');
callback(null, '## IDIOMA [' + lang + '] não disponível! ##');
}
}
}
并且当 'load' 函数被调用时,我总是得到响应:
1) 在 TS TranslateSingleton 文件中:
TranslateSingleton.load(lang, false, null);
2) 在另一个控制器中:
TranslateSingleton.load(resultToken.lang, true, (resultMessage, errorMessage) => {
if (errorMessage) {
resolve(super.trataErro(res, errorMessage));
} else {
resolve(super.trataRetorno(req, res, resultMessage));
}
});
然后,我的回复:
[2020-06-10T11:47:06.257] [ERROR] default - [APPLOG] IDIOMA NÃO ENCONTRADO ==> [ './../languages/language-pt-br.json' ]
[2020-06-10T11:47:06.259] [ERROR] default - [APPLOG] Erro ao recuperar a chave: "AUDITORIA.REGISTRO_AUDITORIA", [ TypeError: callback is not a function
at Function.TranslateSingleton.load (C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\bin\util\translate.js:24:17)
at TranslateSingleton.__ (C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\bin\util\translate.js:44:32)
at C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\bin\service\auditoria.service.js:423:62
at C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\bin\service\base\base.service.js:374:29
at custExecuteCb (C:\Users\emmanuel.oliveira\Documents\AgenciaWeb\aw-server\node_modules\oracledb\lib\connection.js:182:7) ]
谁能给我一个启发?
我想您在这行代码中遇到了错误:
TranslateSingleton.load(lang, false, null);
这里你基本上传递了 null
作为 callback
参数的参数。
在第 callback('OK', null)
行的函数体内,它会尝试调用或调用您作为回调参数传递的函数。由于您的参数是 null
,它无法调用,因为 null
不是函数,因此它会抛出错误。
通过执行以下步骤解决了这个问题:
1) 更改了调用函数
TranslateSingleton.load(lang, false, (a, b) => { });
2) 更改了根目录的路径(仅适用于开发实例)
珠三角 -> ./
开发 -> ./../