TypeScript在Express

时间:2019-11-21 01:56:13

标签: node.js typescript express http-headers nestjs

我正在尝试向请求添加自定义标头,但是必须在界面中对其进行修改/实现。

默认的Request接口引用IncomingHttpHeaders。因此,我尝试使用自己的自定义标记标头扩展此接口。

import { IncomingHttpHeaders } from 'http';

declare module 'express-serve-static-core' {
    interface IncomingHttpHeaders {
        "XYZ-Token"?: string
    }
}

我已经更新了.tsconfig文件以读取./types文件夹。我的文件名为index.d.ts

如果我不使用自定义标头,则可以成功编译代码,但是当我尝试在代码中引用令牌标头时,出现以下编译错误:

错误

error TS2538: Type 'string[]' cannot be used as an index type.

    req.headers['XYZ-Token']

如果我使用原始接口的任何值,则一切正常。

示例:

    req.headers['user-agent']

其他信息:我使用的是NestJS,它在后台使用Fastify / Express。我可以确认正在使用的Request接口来自Express。 Fastify向后兼容所有Express模块​​。主要使用Fastify,因为它更快。

2 个答案:

答案 0 :(得分:0)

无论出于何种原因,它都会认为您传入的字符串是一个数组,但是除此之外,如果您需要设置自定义标头(并且它不是动态值),则可以使用PHP 7.2.0 (cli) (built: Nov 28 2017 23:48:49) ( ZTS MSVC15 (Visual C++ 2017) x64 ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies 装饰。如果它是动态的,那么您可以使用拦截器在飞行前抓取响应并在其中设置标头,例如

@Header()

答案 1 :(得分:0)

看起来声明中的模块名称错误。

即使/****** Object: StoredProcedure [dbo].[myStoredProc] Script Date: 21/11/2019 13:27:41 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[myStoredProc] AS BEGIN SELECT 1 END 接口已从IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[myStoredProc]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[myStoredProc] GO -- ================================================================================================================================ -- Author: Ludovic AUBERT -- creation date: 2019.11.05 -- revision date: -- Goal: -- Exemple of call: EXEC myStoredProc ... -- Description: ... -- ================================================================================================================================ CREATE PROCEDURE [dbo].[myStoredProc] AS BEGIN SELECT 1 END 附加到IncomingHttpHeaders对象,但Request接口的原始来源实际上是{{1}的一部分}包。

以下内容允许在代码中正确访问自定义标头,并且可以正确编译ts。

express-serve-static-core