Как получить поведение ответа на POSTMAN так же, как в браузере? - PullRequest
3 голосов
/ 06 марта 2020

Вот мой код:

const express = require('express');
const app = express();

app.get('/', function (req, res) {
    res.setHeader('Content-Type', 'text/html');
    res.write("First \n");

    setTimeout(() => {
        res.end("Done");
    },2000);
});

app.listen(3000, () => {
    console.log("Server is running on port 3000")
})

Теперь, если я захожу в браузер с помощью http://localhost:3000, то на URL-адресе доступа он показывает First в браузере, а через две секунды он показывает Done , это нормально.

но когда я пытаюсь это сделать на POSTMAN, почему он показывает

Первый
Готов

вместе. Кто-нибудь может объяснить причину этого? Или это возможно или нет, чтобы получить такое же поведение ответа и на почтальоне?

1 Ответ

4 голосов
/ 06 марта 2020

В вашем коде вы отправляете чанки обратно клиенту с res.write эти чанки будут отображаться по мере их поступления в браузер, что приведет к описанному вами эффекту задержки.

В настоящее время, однако, Postman не поддерживает этот чанкинг и ждет, пока не получит сигнал об окончании ответа (с res.end). В основном, он ждет полного ответа, прежде чем что-то с ним делать.

Это может измениться в следующих версиях Почтальона: Github

Редактировать:

Использование API-интерфейс Fetch позволяет обращаться к этим чанкам следующим образом:

fetch("/")
  // Retrieve its body as ReadableStream
  .then(response => response.body)
  .then(body => {
    const decoder = new TextDecoder('utf-8');
    const reader = body.getReader();

    reader.read().then(({ done, value }) => console.log(decoder.decode(value)));
    reader.read().then(({ done, value }) => console.log(decoder.decode(value)));
  });

(за исключением того, что для генерации al oop можно использовать значение done)

...