如何实现 express-ws 路由

Posted

技术标签:

【中文标题】如何实现 express-ws 路由【英文标题】:How to implement express-ws route 【发布时间】:2018-06-03 00:35:00 【问题描述】:

更新:

我需要正确设置 express-ws:

const express = require('express');
let expressWs = require('express-ws');
expressWs = expressWs(express());
const app = expressWs.app;
const router = express.Router();

const createError = require('http-errors');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
...
const playerHeadingRouter = require('./routes/playerHeading')(router, db);

连同我的路线模块:

module.exports = (router, db) => 
  router.get('/api/player/:id', (req, res, next) => 
    res.end();
  );

  router.ws('/api/player/:id', (ws, req) => 
    ws.on('message', function(msg) 
      const coords = JSON.parse(msg);
      db.any(`UPDATE "user" SET x = $coords.x WHERE id = $req.params.id`)
      db.any(`UPDATE "user" SET y = $coords.y WHERE id = $req.params.id`)
      db.any(`UPDATE "user" SET geom = ST_SetSRID(ST_MakePoint(x, y),27700) WHERE id = $req.params.id`)
        .then(() => 
          // success;
          console.log('msg', msg);
        )
        .catch(error => 
          // error;
          console.log('error', error);
        );
    );
    // socket
  );

现在,当我使用 chrome websockets 客户端时,我可以建立连接到:

ws://localhost:3001/api/player-heading/2

并从我的 express 服务器发送一个用于数据库查询的 msg。

【问题讨论】:

【参考方案1】:

如果您托管的是 websocket 端点,您将无法通过 HTTP 访问它。您需要使用 websocket 客户端连接到 ws:// 端点。您可以使用 Chrome 扩展程序 like this one 来执行此操作。

【讨论】:

谢谢。尝试打开 ws://localhost:3001/echo 给我“未定义”。 您的第二个代码 sn-p 设置为回显客户端发送的任何内容。如果您从客户端发送消息,它会返回吗? 请查看更新。我现在可以建立连接,并且可以通过您提到的浏览器插件向快递服务器发送数据。再次感谢。 express-ws 库似乎不再得到积极维护。如果你想要类似的功能,我已经在这里发布了我的解决方案:***.com/questions/69773285/…

以上是关于如何实现 express-ws 路由的主要内容,如果未能解决你的问题,请参考以下文章

TP-link路由器如何实现定时开关

若依(ruoyi)框架:如何实现灵活自定义路由配置

理解:对OSPF引入路由进行过滤以及如何实现对OSPF发布的路由进行过滤

如何使用字典实现动态路由表?

如何实现具有类似 asURLRequest() 的多个路由器

Golang Web入门:如何实现一个RESTful风格的路由