如何在节点获取标头中使用嵌套的对象/数组符号?

问题描述 投票:0回答:1

我正在根据以下规范从打字稿应用程序进行fetch() api调用:

尝试在节点获取调用中使用嵌套对象/数组值作为标头时出现以下错误。

((property)RequestInit.headers ?: HeadersInit类型'{'Content-Type':串; 'Content-Disposition':字符串; 'Memsource':{'targetLangs':串[]; }; }”不可分配给“ HeadersInit”类型。输入'{'Content-Type':字符串; 'Content-Disposition':字符串; 'Memsource':{'targetLangs':string []; }; }'缺少以下属性来自“标头”类型:forEach,追加,删除,获取以及另外7个。ts(2322)index.d.ts(45,5):预期的类型来自属性“标头”在类型'RequestInit'上声明的]

下面是给出问题的代码行。

let project: Promise<Response> = await fetch(apiURL, {
    method: 'POST',
    headers: {
      'Content-Disposition': 'd:/_export/en_US.json',
      'Memsource': { 'targetLangs': ['fr_fr', 'es_es'] },
    },
  }).then(res => res.json())
    .then(json => json)
    .catch(err => console.log(err));

我该如何解决此问题?我是否可以使用此表示法?

node.js typescript node-fetch
1个回答
0
投票

我非常认真地研究了此问题,并了解了帽子HTTP请求标头(或Node-Fetch中的Headers对象)仅支持简单的键/值对。这就是为什么嵌套json值在这种情况下失败的原因。

我厌倦了通过将引号引起来使嵌套值成为简单的json字符串。整个json并转义所有内部引号,如下所示,它的工作方式就像是魅力。

'Memsource': '{ \'targetLangs\': [\'fr_fr\', \'es_es\'] }'

一旦我确认它可以正常工作,我将其更改为JSON.stringify()语句,并且效果很好。哦,我必须对“内容处置”值进行一些小的错误更正。

var customHeader = {'targetLangs': ['fr_fr', 'es_es'],};
let project: Promise<Response> = await fetch(apiURL, {
    method: 'POST',
    headers: {
      'Content-Disposition': 'filename=d:/_export/en_US.json',
      'Memsource': JSON.stringify(customHeader),
    },
  }).then(res => res.json())
    .then(json => json)
    .catch(err => console.log(err));

我想我可能会分享,以防其他人需要此信息。

© www.soinside.com 2019 - 2024. All rights reserved.