Я работаю над тем, что будет встроенным веб-сайтом для аппаратного обеспечения с файловой структурой, где только определенные папки имеют доступ для чтения / записи. Мой server.js вместе с реализацией angularjs будет находиться в каталоге только для чтения, однако мне нужно отобразить изображения, которые будут храниться в отдельном каталоге, который будет иметь права на чтение / запись, так как конечный пользователь может добавлять изображения в папку .
Я знаю, что могу прочитать и отправить все файлы из NodeJS в AngularJS с этим кодом:
fs.readdir(fileDirectory, function(err,files){
files.forEach(function(file){
console.log('got file', file)
fs.readFile(fileDirectory + file, function(err, buffer){
var base64Image = new Buffer(buffer, 'binary').toString('base64');
// res.send(base64Image);
res.end(base64Image);
})
})
})
Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как заставить мой веб-интерфейс ждать всех ответов, поскольку вышеприведенное будет посылать по одному res на файл, но angularJS прекращает прослушивание res после первого появления.
Вот моя функция контроллера AngularJS:
$scope.servericon = [];
var iconarray = fmsFactory.getAllIcons().then(function(res){
console.log('controller got', res);
blob = b64toBlob(res.data, 'image/png')
blobUrl = URL.createObjectURL(blob);
img = document.createElement('img');
img.src = blobUrl.slice(5, blobUrl.length) //remove blob: from url
$scope.servericon.push(img.src)
// document.getElementByID('library').appendChild(img);
});
и мой завод, который является просто базовым запросом
factory.getAllIcons = function(callback){
return $http({
url: '/allIcons',
method: 'GET'
}).then(function(res){
console.log('success', res);
return res
}, function(res){
console.log('something went wrong', res);
})
}
Мои ожидаемые результаты будут массивом URL-адресов файлов, чтобы я мог выполнить ng-repeat для массива servericon и отобразить изображения с тегом img