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

So I have made a Meme Gallery app. Here is the link:https://meme-gallery-web-app.netlify.app/

You can upload an image via link. First of all I was trying to check if the submitted URL had the jpg/png extension, so I can work with it(whether to upload it or not). That’s why I tried to implement Image-type package. But it gives me the mentioned error. Here is the code where I implemented.

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));
    });
  });
};

After submitting the link I got the following error:

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

So I checked and found out that the variable chunk is an object rather than an Uint8Array or Buffer. Why is that? And how to workaround it?

Answer

I think you should read the chunks, concat them and pass the resulting buffer to the imageType library:

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 ));
    })
});