Open NexZhu opened 2 years ago
I also can reproduce with the libraries compression
and forcedomain
. But it works as expected if you just cast to any.
Casting to any didn't work for me with https://github.com/auth0/express-openid-connect
I think we have to adjust https://github.com/deepkit/deepkit-framework/blob/master/packages/http/src/model.ts#L179 in order to make it compatible with the request object interface required by those middlewares.
I wonder though why in the stack trace is express code node_modules/.pnpm/express@4.18.1/node_modules/express/lib/router/layer.js:95
. Are you using express and Deepkit at the same time?
No, I'm just using a type from express
(needed by the express-openid-connect
middleware, here's my code:
import { http, HttpRequest, HttpResponse } from '@deepkit/http'
import type { RequestHandler } from 'express'
import { auth } from 'express-openid-connect'
import { Config } from '~/config'
@http.middleware()
export class OidcMiddleware {
private expressOpenid: RequestHandler
constructor(protected config: Config['oidc']) {
this.expressOpenid = auth(config)
}
execute(
req: HttpRequest,
res: HttpResponse,
next: (err?: unknown) => void,
): void {
// @ts-expect-error: req's param type is incompatible but correct
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-explicit-any
this.expressOpenid(req as any, res, next)
}
}
Casting the arguments to the exact types expected by the middleware still results in the same error:
@http.middleware()
export class OidcMiddleware {
private expressOpenid: RequestHandler
constructor(protected config: Config['oidc']) {
this.expressOpenid = auth(config)
}
execute(
req: HttpRequest,
res: HttpResponse,
next: (err?: unknown) => void,
): void {
this.expressOpenid(
req as unknown as Parameters<RequestHandler>[0],
res as unknown as Parameters<RequestHandler>[1],
next,
)
}
}
I also can reproduce with the libraries
compression
andforcedomain
. But it works as expected if you just cast to any.
@devonpmack Could you please share your code?
Ah maybe it's because compression
and forcedomain
don't try to call req.get
. My code was just complaining about a type error in the IDE, but it runs properly.
middlewares: [
httpMiddleware.for(compression() as any),
httpMiddleware.for(
forceDomain(domain(process.env.NODE_ENV as NodeEnv)) as any
),
],
If I take out as any
Yeah, seems to be different cases, my error happened in run time.
Hello
The documentations and this issue say that Express/Connect middlewares are supported but looking through the code it seems like request type is not converted to what Express middlewars expect, I see in the
HttpRequest
type from@deepkit/http
there is noget(headerName)
method from Express docs here.With latest version of the framework
"@deepkit/http": "1.0.1-alpha.71"
, when I tried to use this middleware: https://github.com/auth0/express-openid-connect I got the following error: