Ошибка типа: Ожидалось, что входной аргумент будет иметь тип Uint8Array, буфер или массив, получен объект

#javascript #node.js #express

Вопрос:

Поэтому я создал приложение для галереи мемов. Вот ссылка:https://meme-галерея-веб-приложение.netlify.app/

Вы можете загрузить изображение по ссылке. Прежде всего, я пытался проверить, имеет ли отправленный URL-адрес расширение jpg/png, чтобы я мог с ним работать(загружать его или нет). Вот почему я попытался реализовать пакет типа изображения. Но это дает мне упомянутую ошибку. Вот код, в котором я реализовал.

 const https = require("https");
const imageType = require("image-type");

const imageModel = require("../models/models.js");

var date = new Date();
var currentDate = date.toLocaleDateString();

const submitLink = async (req, res) => {
  const { url } = req.body;

  https.get(url, (response) => {
    response.on("readable", () => {
      const chunk = response.read(imageType.minimumBytes);
      response.destroy();

      console.log(imageType(chunk));
    });
  });
};
 

После отправки ссылки я получил следующую ошибку:

 TypeError: Expected the input argument to be of type Uint8Array or Buffer or ArrayBuffer, got object
 

Поэтому я проверил и обнаружил, что переменная chunk является объектом, а не Uint8Array или буфером. Это почему? И как это обойти?

Ответ №1:

Я думаю, что вы должны прочитать фрагменты, объединить их и передать полученный буфер в imageType библиотеку:

 https.get(url, response => {
    const chunks = [];
    response.on("data", (chunk) => {
        chunks.push(chunk);
    })
    response.on("end", () => {
        const resultBuffer = Buffer.concat(chunks);
        console.log("image type is", imageType(resultBuffer ));
    })
});
 

Комментарии:

1. кстати, не могли бы вы объяснить, пожалуйста, почему мой код не сработал, хотя я в основном сделал то же самое, что сказал док?

2. Я не уверен на 100%, но я думаю, что описанное использование неверно. Если вы подключаетесь к readable событию, вам следует использовать цикл, чтобы убедиться, что все доступные данные считываются, как здесь ( nodejs.org/docs/latest-v12.x/api/… )