Как использовать нотацию вложенных объектов / массивов в заголовках выборки узлов?

Я пытаюсь выполнить вызов API fetch () из приложения с машинописным текстом на основе приведенной ниже спецификации:

Я получаю следующую ошибку при попытке использовать значение вложенного объекта / массива для заголовков в вызове node-fetch.

(свойство) RequestInit.headers ?: HeadersInit Type '{' Content-Type ': string; 'Content-Disposition': строка; 'Memsource': {'targetLangs': строка []; }; } 'не может быть назначен типу' HeadersInit '. Тип '{' Content-Type ': строка; 'Content-Disposition': строка; 'Memsource': {'targetLangs': строка []; }; } 'отсутствуют следующие свойства из типа' Headers ': forEach, append, delete, get и еще 7.ts (2322) index.d.ts (45, 5): ожидаемый тип происходит из свойства' headers ', которое здесь объявлен в типе 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));

Что мне делать, чтобы исправить проблему? Разве мне нельзя использовать эту нотацию?


person Kay    schedule 17.11.2019    source источник


Ответы (1)


Я очень тщательно исследовал этот вопрос и узнал, что заголовки HTTP-запросов (или объект Headers в Node-Fetch) поддерживают только простые пары ключ / значение. Вот почему вложенное значение json не работает в этом контексте.

Я устал делать вложенное значение простой строкой 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));

Я подумал, что могу поделиться на случай, если кому-то еще понадобится эта информация.

person Kay    schedule 18.11.2019