Javascript 改进尝试不同URL变体直到匹配的循环
我构建了连接到ownCloud的API,并通过WebDAV(使用)获取目录内容。因为我不能在这里使用正则表达式,而且在使用Javascript 改进尝试不同URL变体直到匹配的循环,javascript,webdav,owncloud,Javascript,Webdav,Owncloud,我构建了连接到ownCloud的API,并通过WebDAV(使用)获取目录内容。因为我不能在这里使用正则表达式,而且在使用deep:true时glob匹配似乎不起作用,所以我必须检查文件夹名称的所有变体(因为客户有时输入所有字母大,或者只是姓氏大,但名称正常),这就是我在下面代码中结束的原因。它有很多重复,我认为有一种方法可以让它看起来更好: // if not found then go level up let tryMainDir = false let valid
deep:true
时glob匹配似乎不起作用,所以我必须检查文件夹名称的所有变体(因为客户有时输入所有字母大,或者只是姓氏大,但名称正常),这就是我在下面代码中结束的原因。它有很多重复,我认为有一种方法可以让它看起来更好:
// 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)
}
这个循环最多可以进行两轮。查看文件夹内部,然后查看父目录。为什么有这么多if语句?为了清晰起见,请同时显示validUlr()的代码。if语句的数量也让我感到困扰-这就是为什么我提出这个问题,因为它肯定可以以更优雅的方式完成。使用
validul()
code更新了问题。是否可以使用?您可以在那里使用glob,也可以只获取整个目录并根据内容与regex匹配?您可以将所有URL放在前面的数组中,包括不同的父/子文件夹路径。然后你可以绕过去。我不认为尝试trymindir的循环效果很好。IMO说,最好是使用2个函数调用,或者使用前面提到的数组中的硬编码路径。