#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/… )