GoogleCloudPlatform / GoogleCloudPlatform/functions-framework-nodejs

Implicit Request interface extension causes error 'property rawBody does not exist on type'

Ouverte
#198 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
enhancement P3
Langage dominant
TypeScript
Étoiles
1.4k
Forks
181
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Cloud functions implicitly extend express Request interface with rawBody (see https://github.com/GoogleCloudPlatform/functions-framework-nodejs/blob/master/src/invoker.ts#L44):

```ts
// We optionally annotate the express Request with a rawBody field.
// Express leaves the Express namespace open to allow merging of new fields.
declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Express {
export interface Request {
rawBody?: Buffer;
}
}
}
```

I get error ` Property 'rawBody' does not exist on type 'Request'` when implement handler which uses Request.rawBody attribute like below:

```ts
import {Response, Request} from 'express';

export class HandlerClass{
public async http(request: Request, response: Response): Promise {
const body = request.rawBody;
...
}
}
```

As a workaround I have to create and use my own type instead of native Express Request:
```ts
import * as express from 'express';

export interface Request extends express.Request {
rawBody: Buffer;
}
```

If you have a look at the `firebase-functions` repository then you will see they use explicit extension of Request interface and then use it in code (https://github.com/firebase/firebase-functions/blob/master/src/providers/https.ts#L33)

I think `functions-framework-nodejs` should change implicit interface extension to explicit and provide stand-alone Request with rawBody attribute to avoid this workaround mess in depended applications code.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par src/invoker.ts et comparez son extension implicite de Express Request avec l’extension explicite de Request utilisée dans src/providers/https.ts de firebase-functions. Déterminez comment le framework devrait exposer rawBody aux applications TypeScript dépendantes, puis vérifiez qu’un handler utilisant le type Request fourni peut accéder à request.rawBody sans contournement local.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
express, node.js, typescript
Domaine
api, backend
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.