запрос: как передать файл и сохранить объект ответа - PullRequest
0 голосов
/ 23 декабря 2018

Я использую запрос npm.Я хочу загрузить и записать файл в файловую систему и после этого использовать возвращенный объект ответа для дальнейшей обработки.

Я знаю, что могу напрямую передать объект ответа, но после этого у меня больше нет объекта ответа для дальнейшей обработки.обработка

var result = await request(builtReq).pipe(fs.createWriteStream(myFilePath));

Итак, моя реализация на данный момент выглядит следующим образом:

var result = await request(builtReq);

Но я не могу передать объект результата из-за ложного состояния потока.

Так что мне нужен способ сохранить ответ на запрос и записать файл в файловую систему.Можно ли сбросить состояние потока или как-то сохранить ответ obj и записать файл одновременно?Я пытался реализовать запись файла вручную через.fs.writeFile () после того, как я получил ответ obj, но у меня были проблемы с кодировкой файлов, потому что я могу получить что угодно, и у меня закончились поврежденные файлы.

У кого-нибудь есть идеи, как это решить?

1 Ответ

0 голосов
/ 23 декабря 2018

Вам нужен объект response (который содержит код состояния и заголовки), или вам нужно тело ответа в памяти?

Если вам нужен только объект ответа,и все же, если тело записывается в файл, вы можете получить ответ следующим образом:

var response;

await request(builtReq).on('response', r => {
    console.log('Response received: ' + r);
    response = r;
}).pipe(fs.createWriteStream(myFilePath));

console.log('Finished saving file, response is still ' + response);

Если вам нужно обработать фактическое тело, у вас есть несколько вариантов:

  • Сохраните существующий код как есть, затем просто прочитайте файл с диска сразу после его завершения (поскольку вы используете await, это будет следующая строка) и обработайте его в памяти.

  • Передача входного потока в несколько мест - одно - в поток записи файла, а другое - в буфер в памяти (с использованием стандартного обработчика on('data')).Как только поток заканчивается, файл сохраняется, и вы можете обработать буфер в памяти.См. Связанный вопрос node.js, отправляющий один и тот же читаемый поток для нескольких различных примеров.

...