Таким образом, приведенный ниже код является телом функции на стороне сервера, которую я позже использую на стороне клиента того же приложения:
const fetch = require('node-fetch');
async function fetchImage(url) {
// url: image file url like: http://example.com/img1.png
const res = await fetch(url);
const blob = await res.blob();
console.log(blob);
/* logs a blob successfully
Blob {
I20200316-01:00:19.551(2)? [Symbol(type)]: 'image/jpeg',
I20200316-01:00:19.551(2)? [Symbol(buffer)]: <Buffer ff d8 ff e0 00 10
4a 46 49 46 00 01 01 01 00 60 00 60 00 00 ff e1 0e d2 45 78 69 66 00 00
4d 4d 00 2a 00 00 00 08 00 0c 01 00 00 03 00 00 00 01 03 e8 ... 133125
more bytes>
*/
return blob;
// this however will ALWAYS return {} empty object
}
Я попытался сделать что-то вроде return 'Hello Bros!'
только для моего здравого смысла, и он потребляется должным образом.
Это просто блоб, который не вернется, несмотря ни на что.
Я в основном пытаюсь прокси-вызов на стороне сервера чтобы получить некоторые изображения, которые я могу отобразить в браузере.
Функция вызывающего абонента
async function getImageBlob(url) {
const res = await fetchImage(url);
console.log(res, 'response which is always {} instead of my precious blob');
}
Полная более длинная версия
сервер
Meteor.methods({
async 'products.fetchImage'(url) {
check(url, String);
const res = await fetch(url);
const blob = await res.blob();
console.log(blob, '!!!server blob!!!'); // logs just fine
return blob;
}
})
клиент
// image uploader
import vueFilePond, { setOptions } from 'vue-filepond';
setOptions({
server: {
// initialize image uploader with images already stored on the server
load: async (source, load) => {
// source: 'http://example.com/img1.png'
const response = await meteorCall('products.fetchImage', source);
console.log('blob?', response); // logs {}
load(response);
},
},
});
const FilePond = vueFilePond();