Есть локальный сервер:
const
express = require('express'),
server = express(),
files = [
'Collapse.mp3',
'Eidolon.mp3'
];
server.listen(8080);
server.use(express.static('dist'));
server.get('/', function(request, response) {
response.send(__dirname + '/dist/index.html');
response.end();
});
for (var i = 0; i < files.length; i++) {
server.get('/dist/downloads/' + files[i], function(request, response) {
response.download(__dirname + '/dist/downloads/' + files[i]);
});
}
Но не понимаю почему не работает последний цикл для загрузки двух файлов. Выводил при помощи console.log, пути правильные, но при попытке загрузить пишет: Error: ENOENT: no such file or directory, stat 'D:\Documents\3-2_web_file_server\dist\downloads\undefined'.
При таком формате все работает:
server.get('/dist/downloads/Collapse.mp3', function(request, response) {
response.download(__dirname + '/dist/downloads/Collapse.mp3');
});
server.get('/dist/downloads/Eidolon.mp3', function(request, response) {
response.download(__dirname + '/dist/downloads/Eidolon.mp3');
});
Но так не хочется делать так как файлов может быть больше и для каждого не хочется писать отдельный запрос. Подскажите пожалуйста в чем проблема и как это правильнее реализовать. Спасибо.
В чём тут дело: переданная функция вызывается после того как цикл отработал и значение переменной i навсегда установилось равным 2. По такому индексу нет значения в массиве.
var files = ['Collapse.mp3', 'Eidolon.mp3'];
for( var i = 0; i < files.length; ++i ) {
doSthWithCallbacks(`a-${files[i]}-b`, function() {
console.log(i, files[i]);
});
}
function doSthWithCallbacks(str, cb) {
console.log(`str=${str}`);
setTimeout(cb, 200);
}
Как это обойти - использовать let для объявления переменной i или:
var files = ['Collapse.mp3', 'Eidolon.mp3'];
files.forEach((file) => {
doSthWithCallbacks(`a-${file}-b`, function() {
console.log(file);
});
});
function doSthWithCallbacks(str, cb) {
console.log(`str=${str}`);
setTimeout(cb, 200);
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости