我正在尝试向请求添加自定义标头,但是必须在界面中对其进行修改/实现。
默认的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,因为它更快。
答案 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