Javascript 如何在Express中发送响应

Javascript 如何在Express中发送响应,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我正在使用express和MongoDB,希望在数据库发生任何更改时进行实时更新。 我使用MongoDB变更流。但是,当我将更改功能放在路由内时,它只在我点击路由时发送响应,而当我将更改功能放在路由外时,我无法发送响应 所以我的问题是,当我的收藏发生任何变化时,如何发送响应 const testSchema = new Schema({ name: { type: String, required: true }, email: { type: String, required: tru

我正在使用express和MongoDB,希望在数据库发生任何更改时进行实时更新。 我使用MongoDB变更流。但是,当我将更改功能放在路由内时,它只在我点击路由时发送响应,而当我将更改功能放在路由外时,我无法发送响应

所以我的问题是,当我的收藏发生任何变化时,如何发送响应

const testSchema = new Schema({
  name: { type: String, required: true },
  email: { type: String, required: true },
});

const model = mongoose.model('test', testSchema);

//change 
model.watch().on('change', (data) => {
  console.log(data);
});

router.put('/update', async (req, res) => {
  const data = req.body;
  const info = await model.updateOne(data);
  res.send(info);
});


您试图实现的目标依赖于Web套接字。 套接字是使应用程序跨网络通信的方式

您的浏览器使用套接字编程。它仅为HTTP请求在端口80上与服务器建立连接,并从服务器获取数据,并根据标记显示数据

如果你曾经玩过任何网络游戏,比如说《反击战》,你曾经是主人,那么你就会理解它的用法。您将自己建立为一个主机,并分配了特定的端口进行通信。然后,游戏使用该套接字将数据传递给其他计算机

要做到这一点,你必须学习和理解


大部分课程都在讲解如何将其用于聊天应用程序。但是,如果您更好地理解它,您将能够在套接字上构建任何东西。

您要实现的目标依赖于Web套接字。 套接字是使应用程序跨网络通信的方式

您的浏览器使用套接字编程。它仅为HTTP请求在端口80上与服务器建立连接,并从服务器获取数据,并根据标记显示数据

如果你曾经玩过任何网络游戏,比如说《反击战》,你曾经是主人,那么你就会理解它的用法。您将自己建立为一个主机,并分配了特定的端口进行通信。然后,游戏使用该套接字将数据传递给其他计算机

要做到这一点,你必须学习和理解

大部分课程都在讲解如何将其用于聊天应用程序。但如果您更好地理解它,您将能够在套接字上构建任何内容。

解决方案:服务器发送事件 虽然您也可以使用WebSocket解决问题,但服务器发送的事件更易于实现。

以及html:

<!DOCTYPE html>
<html>
  <body>
    <script>
      const eventSource = new EventSource("http://localhost:4000/changes");
      eventSource.onmessage = (e) => {
        console.log(e);
      };

      eventSource.onerror = (e) => {
        console.log("EventSource failed.");
      };
    </script>
  </body>
</html>
解决方案:服务器发送事件 虽然您也可以使用WebSocket解决问题,但服务器发送的事件更易于实现。

以及html:

<!DOCTYPE html>
<html>
  <body>
    <script>
      const eventSource = new EventSource("http://localhost:4000/changes");
      eventSource.onmessage = (e) => {
        console.log(e);
      };

      eventSource.onerror = (e) => {
        console.log("EventSource failed.");
      };
    </script>
  </body>
</html>

socketIO是实现这一点的唯一方法?@MohdSabban socketIO是实现这一点的最简单、最好和最快的方法,WebSocket是我所知道的将数据从服务器推送到客户端的唯一方法。Graphql订阅呢?@JeremyThille以及从客户端到服务器的socketIO是实现这一点的唯一方法?@MohdSabban socketIO是最简单的方法,实现WebSocket的最佳和最快捷的方法是我所知道的将数据从服务器推送到客户机的唯一方法。Graphql订阅呢?@JeremyThille,以及从客户机到服务器