如何在node-fetch headers中使用嵌套的object/array符号?
How to use nested object/array notation in node-fetch headers?
我正在尝试根据以下规范从打字稿应用程序进行 fetch() api 调用:
- Method: POST
- Request URL: https://cloud.memsource.com/web/api2/v1/projects/KmtNyVlz1skQd2aMVEipp7/jobs?token=AuthenticationToken
- (Header) Content-Disposition: filename*=UTF-8''file.txt
- (Header) Memsource: {"targetLangs":["de","fr"]}
- (Header) Content-Type: application/octet-stream
- Response: Job UID (e.g. dOYgeXzAdAbj4xFjuEVZP2)
尝试在 node-fetch 调用中为 headers 使用嵌套 object/array 值时出现以下错误。
(property) RequestInit.headers?: HeadersInit Type '{ 'Content-Type':
string; 'Content-Disposition': string; 'Memsource': { 'targetLangs':
string[]; }; }' is not assignable to type 'HeadersInit'. Type '{
'Content-Type': string; 'Content-Disposition': string; 'Memsource': {
'targetLangs': string[]; }; }' is missing the following properties
from type 'Headers': forEach, append, delete, get, and 7 more.ts(2322)
index.d.ts(45, 5): The expected type comes from property 'headers'
which is declared here on type '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));
我应该怎么做才能解决这个问题?我不能使用这个符号吗?
我非常努力地研究了这个问题,了解到 HTTP 请求 headers(或 Node-Fetch 中的 Headers object)仅支持简单的 key/value 对。这就是嵌套 json 值在此上下文中失败的原因。
我厌倦了通过在
整个 json 并转义所有内部引号,如下所示,效果很好。
'Memsource': '{ \'targetLangs\': [\'fr_fr\', \'es_es\'] }'
确认它可以工作后,我将其更改为 JSON.stringify() 语句并且效果很好。哦,我不得不在 'Content-Disposition' 值中进行一个小错误的更正。
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));
我想我可能会分享以防其他人需要此信息。
我正在尝试根据以下规范从打字稿应用程序进行 fetch() api 调用:
- Method: POST
- Request URL: https://cloud.memsource.com/web/api2/v1/projects/KmtNyVlz1skQd2aMVEipp7/jobs?token=AuthenticationToken
- (Header) Content-Disposition: filename*=UTF-8''file.txt
- (Header) Memsource: {"targetLangs":["de","fr"]}
- (Header) Content-Type: application/octet-stream
- Response: Job UID (e.g. dOYgeXzAdAbj4xFjuEVZP2)
尝试在 node-fetch 调用中为 headers 使用嵌套 object/array 值时出现以下错误。
(property) RequestInit.headers?: HeadersInit Type '{ 'Content-Type': string; 'Content-Disposition': string; 'Memsource': { 'targetLangs': string[]; }; }' is not assignable to type 'HeadersInit'. Type '{ 'Content-Type': string; 'Content-Disposition': string; 'Memsource': { 'targetLangs': string[]; }; }' is missing the following properties from type 'Headers': forEach, append, delete, get, and 7 more.ts(2322) index.d.ts(45, 5): The expected type comes from property 'headers' which is declared here on type '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));
我应该怎么做才能解决这个问题?我不能使用这个符号吗?
我非常努力地研究了这个问题,了解到 HTTP 请求 headers(或 Node-Fetch 中的 Headers object)仅支持简单的 key/value 对。这就是嵌套 json 值在此上下文中失败的原因。
我厌倦了通过在 整个 json 并转义所有内部引号,如下所示,效果很好。
'Memsource': '{ \'targetLangs\': [\'fr_fr\', \'es_es\'] }'
确认它可以工作后,我将其更改为 JSON.stringify() 语句并且效果很好。哦,我不得不在 'Content-Disposition' 值中进行一个小错误的更正。
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));
我想我可能会分享以防其他人需要此信息。