Для получения изображения с сервера использую функцию getPhoto. Код представляю ниже:
const getPhoto = async (channelName: string) => {
try {
const url = import.meta.env.VITE_API_URL + '/channels/' + channelName + '/photo';
const {data} = await useLazyFetch(url);
if (data.value) {
return url;
} else {
return null;
}
} catch (e) {
console.log(e);
return null;
}
}
В данный метод с сервера может прийти либо картинка, либо JSON. При использовании данного метода Nuxt возвращает ошибку "Cannot stringify arbitrary non-POJOs". Если заменяю useLazyFetch на обычный fetch, то всё работает.
При этом другие методы для получения информации с сервера прекрасно работают и с useLazyFetch.
Также на всякий случай приложу метод для возврата картинки с сервера:
@Header('Content-Type', 'application/jpeg')
@Header('Content-Disposition', 'attachment; filename=avatar.jpg')
@Get(':channelName/photo')
async getFile(@Param('channelName') channelName: string) {
const channel = await this.channelService.getChannel({
channelName,
});
if (!channel) {
throw new NotFoundException({
error: {
code: 'NOT_FOUND_ERROR',
msg: 'Channel not found',
},
});
}
let fileStream: ReadStream;
try {
const file = await open(
join(process.cwd(), '/_td_database/profile_photos/' + channel.photo),
);
fileStream = file.createReadStream();
return new StreamableFile(fileStream);
} catch (e) {
if (e.code === 'ENOENT') {
throw new UnprocessableEntityException({
error: {
code: 'PHOTO_ERROR',
msg: 'Error with loading photo',
},
});
} else {
console.log(e);
throw new BadRequestException({
error: {
code: 'UNKNOWN_ERROR',
msg: 'Unknown error',
},
});
}
}
}
Заранее спасибо всем!