如何将函数从服务器发送到客户端

How do i send a function from the server to the client

提问人:ContentGamer 提问时间:7/31/2023 最后编辑:ContentGamer 更新时间:7/31/2023 访问量:56

问:

我是在 NodeJS 和 ExpressJS 中发布请求的新手,我试图传入一个函数(不是函数的结果)以在客户端中被调用,我有这个监听器和这个帖子请求(我试图制作一个 discord 机器人 webview 工具)

服务器端

app.post("/dashboardstartup", jsonParser, (req, res) => {
    // authClient is a discord client (Discord Bot)

    if(authClient)
    {
        authClient.on("messageCreate", (message) => {
             // always send the message once its created
             res.json({
                 message
             })
             // the problem is that when I send the result the fetch request from the client stops
        });
    }
})

客户端

// ...

await fetch("http://localhost:8080/dashboardstartup", {
     method: "POST";
     headers: {
         'Content-type': 'application/json'
     }

}).then(a=>a.json()).then(a=>{
   // once the fetch response is received, the fetch stops and the client can't listen to messages anymore

  console.log(a.messsage) // prints out "Hello world!"
})

还有比 fetch 方法更好的方法吗?

节点 .js Express 服务器端 客户端

评论

0赞 Marc 7/31/2023
如果我理解正确,您尝试向客户端发送一个函数,而不是结果,而是它的代码,并在客户端执行此函数()。如果这是对的,那是不可能的。但是我没有看到任何要发送的功能。Im trying to pass in a function (not the function's result) to get called in the client

答:

0赞 Sebastian Kaczmarek 7/31/2023 #1

您可以使用本机 response.write() 方法。

response.json() 方法来自 Express.js 包,它在发送响应后在内部关闭连接。

以下是如何使用的示例:.write()

authClient.on("messageCreate", (message) => {
             // always send the message once its created
             res.write(JSON.stringify({ message }), 'utf8');
        });

它不会关闭连接,直到您手动执行此操作,并且客户端将继续侦听消息。因此,请记住在结束时也结束响应:authClient

authClient.on('close', () => res.end());

评论

0赞 ContentGamer 7/31/2023
客户端呢?我应该只使用 fetch 吗?
0赞 ContentGamer 7/31/2023
而一个不和谐的 BOT 客户端 (authClient) 没有事件,称为“关闭”