将属性添加到快速请求对象

Ome*_*ave 3 javascript express typescript nestjs

我正在尝试向 Express 请求对象添加属性“forwardingUrl”。

我尝试通过创建文件 ./typing.d.ts 进行声明合并:

declare namespace Express {
  export interface Request {
    forwardingUrl: string;
  }
}
Run Code Online (Sandbox Code Playgroud)

在编辑器中,我可以使用该属性并访问它,但是当我编译时,出现以下错误:

Property 'forwardingUrl' does not exist on type 'Request<ParamsDictionary>'.
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

编辑

我收到错误的代码:

import { Middleware, Request } from '@tsed/common';
import { Request as ExpressRequest } from 'express';
@Middleware()
export class Wso2ForwardingUrlParser {
    async use(@Request() request: ExpressRequest) {
        if (request.header('X_FORWARDED_HOST') && request.header('X_FORWARDED_PREFIX')) {
            request.forwardingUrl = `https://${request.header('X_FORWARDED_HOST')}${request.header('X_FORWARDED_PREFIX')}`;
        }   else {
            request.forwardingUrl = '';
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

添加扩展 Request 的新模型

import {Request} from "@tsed/common";

export interface RequestModel extends Request {
    forwardingUrl: string
}
Run Code Online (Sandbox Code Playgroud)

然后在方法中使用它

import { Middleware, Request } from '@tsed/common';
import { Request as ExpressRequest } from 'express';
@Middleware()
export class Wso2ForwardingUrlParser {
    async use(@Request() request: RequestModel) {
        if (request.header('X_FORWARDED_HOST') && request.header('X_FORWARDED_PREFIX')) {
            request.forwardingUrl = `https://${request.header('X_FORWARDED_HOST')}${request.header('X_FORWARDED_PREFIX')}`;
        }   else {
            request.forwardingUrl = '';
        }
    }
}
Run Code Online (Sandbox Code Playgroud)