Вы вызываете shortFileNameFn
рекурсивно, но не возвращаете результат. Вы можете решить эту проблему следующим образом:
exports.shortFileNameFn = (longUrlPath) => {
if (longUrlPath) {
//remove possible url querystring
if (longUrlPath.lastIndexOf('?')>-1) longUrlPath=longUrlPath.substring(0,longUrlPath.lastIndexOf('?'));
//recursively remove the section after the last '/' until a valid filename occurs
const idx = longUrlPath.lastIndexOf('/');
if (/^(?=[\S])[^\\ \/ : * ? " < > | ]+$/.test(longUrlPath.substring(idx + 1))) {
const validFileName = longUrlPath.substring(idx + 1);
console.log(validFileName); //Returns SB_20Detail.jpg
return validFileName;
}
//if name not yet valid, remove last section and call function again
longUrlPath = longUrlPath.substring(0, idx);
return this.shortFileNameFn(longUrlPath);
}
};
Чтобы увидеть, как происходит рекурсия, попробуйте добавить console.log
в начале функции shortFileNameFn
, и вы должны увидеть, что она появляется несколько раз.