【问题标题】:using Sessions in express-ws app and typescript在 express-ws 应用程序和打字稿中使用 Sessions
【发布时间】: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
  • 我已经添加了打字,这就是问题来了,不打字不会出错。

标签: typescript express websocket


【解决方案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

【讨论】:

    猜你喜欢
    • 2019-05-03
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2017-10-07
    • 2020-03-06
    • 2020-06-18
    • 1970-01-01
    • 2022-12-24
    相关资源
    最近更新 更多