From 7db51693ad0c0ba79ae4d28524a732787e28fece Mon Sep 17 00:00:00 2001 From: noelorin Date: Sun, 27 Sep 2026 16:50:58 +0800 Subject: [PATCH] fix(mount): rootPath is source of truth for WebDAV test Do not fail when listing / fails; many NAS forbid listing root. --- packages/trpc/src/services/mount.service.ts | 25 +++++++++++---------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/packages/trpc/src/services/mount.service.ts b/packages/trpc/src/services/mount.service.ts index b8e141f..da58ffe 100644 --- a/packages/trpc/src/services/mount.service.ts +++ b/packages/trpc/src/services/mount.service.ts @@ -163,19 +163,20 @@ export const mountService = { username: input.username, password, }); - // 1) 先探 WebDAV 根:区分「认证/不是 WebDAV」与「根路径写错」 - try { - await listDirectory(client, "/"); - } catch (e) { - const msg = describeWebdavError(e); - if (msg.includes("认证失败") || msg.includes("不是 WebDAV") || msg.includes("连接")) { - return { ok: false, message: `${msg}(探测 WebDAV 根路径 / 时失败)` }; - } - // 根 400 等:仍继续试 rootPath,部分服务根不可列 - } const root = normalizeWebdavPath(input.rootPath || "/"); - await listDirectory(client, root); - return { ok: true, message: "连接成功" }; + try { + await listDirectory(client, root); + return { ok: true, message: "连接成功" }; + } catch (e) { + // 根路径失败:再探 / 仅用于补充提示,不以 / 的成败作为结论 + // (部分 NAS 禁止列 /,或 / 与共享根权限不同) + try { + await listDirectory(client, "/"); + } catch { + // 忽略 + } + return { ok: false, message: describeWebdavError(e, root) }; + } } catch (e) { return { ok: false, message: describeWebdavError(e, input.rootPath || "/") }; }