Error: An unexpected error occurred invoking 'JoinRoom' on the server
Error: An unexpected error occurred invoking 'JoinRoom' on the server
我使用 React 和 asp.net 核心 SignalR 服务创建了一个聊天应用程序。但我收到一条错误消息“错误:在服务器上调用 'JoinRoom' 时发生意外错误。”
我在服务器端没有收到任何错误,仅在浏览器控制台上使用它。
My React App.js JoinRoom 方法可用的代码如下所示:
const currentUser = JSON.parse(localStorage.getItem('user'));
const [connection, setConnection] = useState();
const [messages, setMessages] = useState([]);
const [users, setUsers] = useState([]);
let user;
let room;
const joinRoom = async () => {
try {
if (localStorage.getItem("user") === null) {
user = "test";
room = 1;
}
else{
user = currentUser.name;
room = currentUser.groupId;
}
const connection = new HubConnectionBuilder()
.withUrl("https://localhost:44316/chat")
.configureLogging(LogLevel.Information)
.build();
connection.on("ReceiveMessage", (user, message) => {
setMessages(messages => [...messages, { user, message }]);
});
connection.on("UsersInRoom", (users) => {
setUsers(users);
});
connection.onclose(e => {
setConnection();
setMessages([]);
setUsers([]);
});
await connection.start();
await connection.invoke("JoinRoom", { user, room });
setConnection(connection);
} catch (e) {
console.log(e);
}
}
const sendMessage = async (message) => {
try {
await connection.invoke("SendMessage", message);
} catch (e) {
console.log(e);
}
}
const closeConnection = async () => {
try {
await connection.stop();
} catch (e) {
console.log(e);
}
}
useEffect(() => {
joinRoom();
}, []);
return (
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/login" component={Login} />
<Route exact path="/register" component={Register} />
<Route exact path="/notify" component={Notify} />
<Route exact path="/chat" render={(props) => <Chat {...props} sendMessage={sendMessage} messages={messages} users={users} closeConnection={closeConnection} />}/>
<Route exact path="/groups" component={Groups} />
<Route exact path="/sendnotify" component={SendNotification} />
<Route component={Error} />
</Switch>
);
}
首先,当组件挂载时,我们使用 useEffect 方法来响应您想要 运行 的事情,不要在组件内部执行 joinRoom();
等功能。
所以你应该添加:
useEffect(() => {
joinRoom();
}, []);
在您的组件顶部。
我使用 React 和 asp.net 核心 SignalR 服务创建了一个聊天应用程序。但我收到一条错误消息“错误:在服务器上调用 'JoinRoom' 时发生意外错误。”
我在服务器端没有收到任何错误,仅在浏览器控制台上使用它。
My React App.js JoinRoom 方法可用的代码如下所示:
const currentUser = JSON.parse(localStorage.getItem('user'));
const [connection, setConnection] = useState();
const [messages, setMessages] = useState([]);
const [users, setUsers] = useState([]);
let user;
let room;
const joinRoom = async () => {
try {
if (localStorage.getItem("user") === null) {
user = "test";
room = 1;
}
else{
user = currentUser.name;
room = currentUser.groupId;
}
const connection = new HubConnectionBuilder()
.withUrl("https://localhost:44316/chat")
.configureLogging(LogLevel.Information)
.build();
connection.on("ReceiveMessage", (user, message) => {
setMessages(messages => [...messages, { user, message }]);
});
connection.on("UsersInRoom", (users) => {
setUsers(users);
});
connection.onclose(e => {
setConnection();
setMessages([]);
setUsers([]);
});
await connection.start();
await connection.invoke("JoinRoom", { user, room });
setConnection(connection);
} catch (e) {
console.log(e);
}
}
const sendMessage = async (message) => {
try {
await connection.invoke("SendMessage", message);
} catch (e) {
console.log(e);
}
}
const closeConnection = async () => {
try {
await connection.stop();
} catch (e) {
console.log(e);
}
}
useEffect(() => {
joinRoom();
}, []);
return (
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/login" component={Login} />
<Route exact path="/register" component={Register} />
<Route exact path="/notify" component={Notify} />
<Route exact path="/chat" render={(props) => <Chat {...props} sendMessage={sendMessage} messages={messages} users={users} closeConnection={closeConnection} />}/>
<Route exact path="/groups" component={Groups} />
<Route exact path="/sendnotify" component={SendNotification} />
<Route component={Error} />
</Switch>
);
}
首先,当组件挂载时,我们使用 useEffect 方法来响应您想要 运行 的事情,不要在组件内部执行 joinRoom();
等功能。
所以你应该添加:
useEffect(() => {
joinRoom();
}, []);
在您的组件顶部。