在express-ws应用和打字稿中使用会话

时间:2018-07-24 12:14:40

标签: typescript express websocket

我正在尝试使用Typescript使用expressexpress-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要求第一个参数的类型为express.Request。实际上express.Requesthttp.IncomingMessage的子代。

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

任何想法如何解决这个问题? 或如何在打字稿中与express-session一起使用会话

如果我替换

 import * as session from 'express-session';

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

正在工作。但是如何使用import并进行类型检查呢?

1 个答案:

答案 0 :(得分:0)

只需尝试这样做

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