在 express-ws 应用程序和打字稿中使用 Sessions

Posted

技术标签:

【中文标题】在 express-ws 应用程序和打字稿中使用 Sessions【英文标题】:using Sessions in express-ws app and typescript 【发布时间】:2018-07-24 12:14:40 【问题描述】:

我正在尝试使用 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 和类型检查来做到这一点?

【问题讨论】:

你可以为这个包安装类型。 npm i @types/express-session 我已经添加了打字,这就是问题来了,不打字不会出错。 【参考方案1】:

试试这个

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

【讨论】:

以上是关于在 express-ws 应用程序和打字稿中使用 Sessions的主要内容,如果未能解决你的问题,请参考以下文章

打字稿中的 baseUrl 和路径 - 如何

打字稿中@符号的含义--Angular 2

尝试使用 Ionic2 和打字稿中的 http 请求与通用提供程序进行 oauth2

在nodejs和打字稿中使用变量到静态方法

使用枚举和泛型在打字稿中获取星期几

打字稿中 obj.prop 和 obj['prop'] 的区别?