在 express-ws 应用程序和打字稿中使用 Sessions
Posted
技术标签:
【中文标题】在 express-ws 应用程序和打字稿中使用 Sessions【英文标题】:using Sessions in express-ws app and typescript 【发布时间】:2018-07-24 12:14:40 【问题描述】:我正在尝试使用 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
要求第一个参数的类型为 express.Request
。实际上express.Request
是http.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的主要内容,如果未能解决你的问题,请参考以下文章