TypeScript中的express-ws替代项

问题描述 投票:2回答:4

我已经搜索了几天,但仍然没有找到任何替代方法,或者在尝试写TypeScript声明时也没有帮忙。

https://www.npmjs.com/package/express-ws

重要的是,它可以与其他任何快递路线一起使用。身份验证,角色和路径参数。

node.js typescript websocket
4个回答
4
投票

express-ws的键入现在为created

tests显示如何使用它:

import expressWs from 'express-ws';
const { app, getWss, applyTo } = expressWs(express());

或:

const app = expressWs(express()).app;

例如,然后在声明路由而不是写时:

const myRoutes = function(app: Express) {...}

您需要指定express-ws类型:

import expressWs from 'express-ws';
const myRoutes = function(app: expressWs.Application) {...}

1
投票

唯一的问题是Router类型没有ws(...)方法。添加

export interface RouterWs extends express.Router {
  ws (route: string, ...cb): RouterWs; 
}

然后在获取Router时,将其强制转换为您的类型。

const router = express.Router() as RouterWs;
router.ws('/somepath', (ws, req) => {...

0
投票

我一直在为xterm.js(v3)项目尝试相同的方法,该项目将其demo / app.js替换为我们的需求和TypeScript。我偶然发现了这篇“如何做”的文章,看起来像是一个有前途的替代方法:WebSocket + Node.js + Express-使用Typescript的逐步教程

https://medium.com/factory-mind/websocket-node-js-express-step-by-step-using-typescript-725114ad5fe4


0
投票

感谢Derek HillNormunds Kalnberzins

与路由器配合使用效果更好

首次导入快递-ws

import expressWs from 'express-ws';

要使用ws方法,您需要加强表达(我这样理解)

const { app, getWss, applyTo } = expressWs(express());

之后express.Router包含ws方法,但是打字稿的类型错误,您只需要转换类型即可。

const router = express.Router() as expressWs.Router;

定义路由逻辑

router.ws('/echo', (ws, req) => {
    ws.on('message', (msg: String) => {
        ws.send(msg);
    });
});

最后将router添加到快递app

app.use("/ws-stuff", router);
© www.soinside.com 2019 - 2024. All rights reserved.