我正在尝试将 signalr 与 sveltekit 一起使用。以下行抛出错误:
const hubConnection = new HubConnectionBuilder().withUrl("/api/notifications").build();
我确信 /api/notifications 端点可以工作。 错误消息是:无法解析“/api/notifications”。相关代码在SignalR的HttpConnection.js模块中:
_resolveUrl(url) {
// startsWith is not supported in IE
if (url.lastIndexOf("https://", 0) === 0 || url.lastIndexOf("http://", 0) === 0) {
return url;
}
if (!Utils_1.Platform.isBrowser) {
throw new Error(`Cannot resolve '${url}'.`);
}
...
}
正如预期的那样,如果我传递“https://localhost:5000/api/notifications”的完整路径,那么错误就会消失。但是相对路径确实会引发上述错误。然后我查看了SignalR的Utils.js:
class Platform {
// react-native has a window but no document so we should check both
static get isBrowser() {
return !Platform.isNode && typeof window === "object" && typeof window.document === "object";
}
...
}
不知何故,isBrowser 返回 false,导致错误。
有人可以帮忙解决这个问题吗?
问题是包含上述代码的模块被导入到layout.ts中,并在节点上下文中执行。因此,我提取了代码以避免将其导入到layout.ts中。然而,将其导入到 +layout.svelte 中是可以的,因为在这种情况下,集线器连接构建将在浏览器上下文中执行。