将 signalr 与 sveltekit 一起使用

问题描述 投票:0回答:1

我正在尝试将 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,导致错误。

有人可以帮忙解决这个问题吗?

signalr sveltekit
1个回答
0
投票

问题是包含上述代码的模块被导入到layout.ts中,并在节点上下文中执行。因此,我提取了代码以避免将其导入到layout.ts中。然而,将其导入到 +layout.svelte 中是可以的,因为在这种情况下,集线器连接构建将在浏览器上下文中执行。

© www.soinside.com 2019 - 2024. All rights reserved.