Как преобразовать функцию обратного вызова Node.js в поток записи? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть простая функция обратного вызова Node.js, которая возвращает данные клиентскому приложению после получения ответа от стороннего API.

reqHandlers.foods.get = (category_id, callback): void => {

  // Create Request Options
  const options = {
    host: 'example.com',
    port: 1234,
    path: `/api/foods?id=${category_id}`,
    method: 'GET'
  }

  https.get(options, (res) => {

      let data = '';

      // A chunk of data has been receieved.
      res.on('data', (chunk) => {
        data += chunk;
      });

      // The whole response has been received.
      res.on('end', () => {

      // do something with the response data
      extractFieldsFromResponse(JSON.parse(data))
          .then(simpleData => {
              callback(200, simpleData);
          })

 // Error handling
 }).on('error', (e) => {
   callback(500, e);
 });

}

Поскольку мне нужно извлечь определенные поляиз объекта ответа мне нужно дождаться ответа до конца, но объект simpleData все еще слишком велик, чтобы отправить его обратно на клиентскую сторону с помощью функции обратного вызова, поэтому я попытался преобразовать его в поток записи с помощьюзамена callback(200, simpleData); на:

...
const writableStream = new Stream.Writable();

writableStream._write = (simpleData, encoding, next) => {
    next();
};
...

Однако это не разрешает запрос GET, и клиентская сторона не получает никакого ответа от сервера.

Может кто-нибудь сказать мне, какмогу я передать поток simpleData объект на клиентскую сторону, пожалуйста? Заранее спасибо!

...