У меня есть API сборки, который подключается к ownCloud и получает содержимое каталога через WebDAV (используя эту библиотеку ). Поскольку здесь я не могу использовать регулярные выражения, и при использовании deep: true
кажется, что сопоставление глобусов не работает, мне приходится проверять все варианты имени папки (поскольку клиенты иногда вводят все буквы большими или просто большими фамилиями, но обычно называют ) и вот как я закончил с кодом ниже. В нем много повторений, и есть способ, чтобы он выглядел лучше:
// if not found then go level up
let tryMainDir = false
let validUrl = () => {
let url = `${baseUrl}/${caseYearAndMonth}/${lastName} ${firstName} - ${formNumber}/Form`
return tryMainDir ? url.replace(`/${caseYearAndMonth}`, '') : url
}
let isUrlValid = await client.exists(validUrl())
const updateIsUrlValid = async () => {
isUrlValid = await client.exists(validUrl())
console.log(isUrlValid)
}
if(!isUrlValid){
// some names are uppercase and ownCloud is case-sensitive
do {
if(!isUrlValid){
lastName = lastName.toUpperCase()
await updateIsUrlValid()
}
if(!isUrlValid){
firstName = firstName.toUpperCase()
await updateIsUrlValid()
}
if(!isUrlValid){
firstName = firstName.toLowerCase()
lastName = lastName.toLowerCase()
await updateIsUrlValid()
}
if(!isUrlValid){
firstName = firstName.charAt(0).toUpperCase() + firstName.slice(1)
lastName = lastName.charAt(0).toUpperCase() + lastName.slice(1)
await updateIsUrlValid()
}
if(!isUrlValid){
firstName = firstName.charAt(0).toUpperCase() + firstName.slice(1)
lastName = lastName.charAt(0).toUpperCase() + lastName.slice(1)
await updateIsUrlValid()
}
if(!isUrlValid && tryMainDir){
break;
}
if(!isUrlValid){
tryMainDir = true
}
} while (!isUrlValid)
}
Предполагается, что l oop будет делать максимум два раунда. Посмотреть в папке, а затем в родительском каталоге.