TypeScript 中的 express-ws 替代方案

Pat*_*Pat 3 websocket node.js typescript

我已经搜索了几天,但仍然没有找到任何替代方法或帮助为它编写 TypeScript 声明,因为我也尝试过。

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

重要的是它适用于 express 中的任何其他路由。身份验证、角色和路径参数。

Der*_*ill 10

现在已经创建了 express-ws 的类型。

测试展示了如何使用它:

import expressWs from 'express-ws';
const { app, getWss, applyTo } = expressWs(express());
Run Code Online (Sandbox Code Playgroud)

或者:

const app = expressWs(express()).app;
Run Code Online (Sandbox Code Playgroud)

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

const myRoutes = function(app: Express) {...}
Run Code Online (Sandbox Code Playgroud)

您需要指定 express-ws 类型:

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


小智 6

感谢Derek HillNormunds Kalnberzins

配合路由器使用效果更好

首先导入express-ws

import expressWs from 'express-ws';
Run Code Online (Sandbox Code Playgroud)

使用ws方法需要加强express(我是这样理解的)

const { app, getWss, applyTo } = expressWs(express());
Run Code Online (Sandbox Code Playgroud)

之后 express.Router包含了ws方法,但是typescript的类型不对,只需要转换类型即可。

const router = express.Router() as expressWs.Router;
Run Code Online (Sandbox Code Playgroud)

定义路由逻辑

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

最后添加router到快递app

app.use("/ws-stuff", router);
Run Code Online (Sandbox Code Playgroud)