UnhandledPromiseRejectionWarning: TypeError: _base64Stream2.default.encode не является функцией - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь сделать этот простой API с помощью этой статьи. Основная цель чтения этой статьи - научиться реагировать на нативный, но он начинается с сервера в nodejs. Я не смог правильно его запустить.Вот ссылка на статью ссылка

Вот код файла server.js

import express from 'express';
import http from 'http';
import giphyapi from 'giphy-api';
import base64 from 'base64-stream';
// Initialize http server
const app = express();

// Register /gif endpoint that returns base64 encoded gif
app.get('/gif', async (req, res) => {
  res.json({
    gif: await fetchGif(),
  });
});

// Launch the server on port 3000
const server = app.listen(3000, () => {
  const { address, port } = server.address();
  console.log(`Listening at http://${address}:${port}`);
});
// Fetch random GIF url with Giphy API, download and Base64 encode it
export const fetchGif = async () => {
    const item = await giphyapi().random('cat');
    return await encode(await download(item.data.image_url));
  };

  // File download helper
const download = async (url) => {
    return new Promise((resolve, reject) => {
      let req = http.get(url.replace('https', 'http'));
      req.on('response', res => {
        resolve(res);
      });
      req.on('error', err => {
        reject(err);
      });
    });
  };
  // Base64 encode helper
const encode = async (content) => {
    let output = 'data:image/gif;base64,';
    const stream = content.pipe(base64.encode());
    return new Promise((resolve, reject) => {
      stream.on('readable', () => {
        let read = stream.read();
        if (read) {
          output += read.toString();
        }
        else {
          resolve(output);
        }
      });
      stream.on('error', (err) => {
        reject(err);
      });
    });
  };

Ответы [ 2 ]

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

ошибка возникает из-за того, что сторонняя библиотека "base64-stream" не имеет функции "закодирована", она может существовать в предыдущих версиях.

Для решения этой проблемы вам необходимоизменить некоторые строки вашего кода так, чтобы ваш сервер выглядел как код ниже.

const express = require('express'); // instead of "import express from 'express';"
const http = require('http'); // instead of "import http from 'http';"
const giphyapi = require('giphy-api'); // instead of "import http from 'http';"
const { Base64Encode } = require('base64-stream'); // instead of "import base64 from 'base64-stream';"
// Initialize http server
const app = express();

// Register /gif endpoint that returns base64 encoded gif
app.get('/gif', async (req, res) => {
  try {
    const gif = await fetchGif();
    res.json({ gif });
  } catch (error) {
    res.status(500).send({ error });
  }
});

// Base64 encode helper
const encode = (content) => {
  let output = 'data:image/gif;base64,';
  const stream = content.pipe(new Base64Encode()); // instead of "const stream = content.pipe(base64.encode());"
  return new Promise((resolve, reject) => {
    stream.on('readable', () => {
      let read = stream.read();
      if (read) {
        output += read.toString();
      }
      else {
        resolve(output);
      }
    });
    stream.on('error', (err) => {
      reject(err);
    });
  });
};

// Launch the server on port 3000
const server = app.listen(3000, () => {
  const { address, port } = server.address();
  console.log(`Listening at http://${address}:${port}`);
});

// Fetch random GIF url with Giphy API, download and Base64 encode it
const fetchGif = async () => {
  try {
    const item = await giphyapi().random('cat');
    const image = await download(item.data.image_url);
    return await encode(image);
  } catch (error) {
    console.log('fetchGif', error);
  }
};

// File download helper
const download = (url) => {
  return new Promise((resolve, reject) => {
    let req = http.get(url.replace('https', 'http'));
    req.on('response', res => {
      resolve(res);
    });
    req.on('error', err => {
      reject(err);
    });
  });
};
0 голосов
/ 06 декабря 2018

base64-stream не имеет функции с именем encode(..).

Существует два класса Base64Encode, Base64Decode, которые используются для потоковой передачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...