javascript - 如何从路由请求发送ws消息

标签 javascript node.js express websocket

我一直在尝试创建一个使用 telegram-bot、express 服务器和 React 应用程序的应用程序。因此,我需要从 telegram-bot 创建一个 POST 请求来发送给express,而express则将POST数据发送到websocket连接:

const express = require("express");
const app = express();
const expressWs = require("express-ws")(app);

// handles bot request
app.post("/request", (req, res) => {
  playlist.push(req.body.url);
  res.status(200).send({ message: "video is added to playlist" });
});

// after handling requst data must go here and send ws message to client side
app.ws("/echo", (ws, req) => {
  ws.on("message", msg => {
  ws.send(`msg is = ${msg}`);
  });
});

我做得对吗?如果是,如何在处理 app.post 路由的请求后调用 ws.send?

最佳答案

根据我对您问题的理解,这是您的代码的更新版本,它完全符合您的要求。

我用 ws 替换了 express-ws 包,因为这足以满足您的用例。

express 服务器在端口 8080 上运行,而 websocket 服务器在端口 8081 上运行,因为它们是不同的协议(protocol),并且不会在同一端口上运行(您可以使其工作,但我不推荐它 See this question

const express = require("express");
const Websocket = require('ws');
const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

const wss = new Websocket.Server({ port: 8081 });

wss.on('connection', (ws) => {
  console.log('One client connected');
  ws.on("message", msg => {
    ws.send(`msg is = ${msg}`);
  });
})

// handles bot request
app.post("/request", (req, res) => {
  // Broadcast URL to connected ws clients
  wss.clients.forEach((client) => {
    // Check that connect are open and still alive to avoid socket error
    if (client.readyState === Websocket.OPEN) {
      client.send(url);
    }
  });

  res.status(200).send({ message: "video is added to playlist" });
});


app.listen(8080, () => {
  console.log('Express listening on 8080');
  console.log('Websocket on 8081');
});

通过curl和curl -d 'url=https://example.com/examplesong' localhost:8080/request进行测试,我有一个客户端连接到ws://localhost: 8081 一切看起来都很好。

关于javascript - 如何从路由请求发送ws消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58483487/

相关文章:

javascript - 将文本字段更新为 JSON 字符串 - Javascript/JQuery

javascript - 在 CSS 中选择第二个 tr 的第一个 td

javascript - 在AngularJS中重定向后设置Flash消息

javascript - 在 Express.js 中上传图像的问题

javascript - res.json 不在回调函数内工作

json - 使用 sequelize 防止将连接表数据添加到 json

javascript - 循环遍历 Google Sheets JSON

angularjs - angularjs 中重复的 ajax 调用

javascript - Node http 服务器错误

javascript - 推送时 NodeJS 数组结果为空