首页 > 解决方案 > 在 express-ws 应用程序和打字稿中使用 Sessions

问题描述

我正在尝试使用 Typescript 构建节点express服务器express-ws。我想在我的应用程序中使用会话。所以我用过express-session

下面是伪代码:

import * as session from 'express-session';
import * as express from 'express'
import * as expressWs from 'express-ws'

const sessionParser = session({
    saveUninitialized: false,
    secret: '$eCuRiTy',
    resave: false
});

let expressWsApp = expressWs(expressApp, webServer, {
    wsOptions : {
        verifyClient : (info, done) => {
            sessionParser(info.req, {}, () => {
                done(info.req.session.userId);
            });
        }
    }
}).app

我收到以下错误。

Argument of type 'IncomingMessage' is not assignable to parameter of type 'Request' in 
sessionParser(info.req, {}, () => {...

现在的问题是,sessionParser要求第一个参数是 type express.Request。而实际上express.Request是 的孩子http.IncomingMessage

那么如何将父类类型转换为子类?

知道如何解决这个问题吗?express-session或如何在打字稿中使用会话

如果我更换

 import * as session from 'express-session';

 const session = require('express-session');

这是工作。但是如何使用import和类型检查呢?

标签: typescriptexpresswebsocket

解决方案


试试这样做

let expressWsApp = expressWs(expressApp, webServer, {
    wsOptions : {
        verifyClient : (info, done) => {
            info.req.res = {}; 
            sessionParser(info.req, info.req.res, () => {
                done(info.req.session.userId);
            });
        }
    }
}).app

推荐阅读