Сервер - node.js Отправляю файл на сервер с ajax запросом, прогресс загрузки отображается. Есть кнопка, которая останавливает этот ajax запрос (xhr.abort()). После этого сервер падает с ошибкой request aborted. Что делать?
app.post("/blog/add", function (req, res, next) {
//Проанализируем загрузку файла
var form = new multiparty.Form();
var wayImage = "/files/";
form.on('part', function (part) {
var path = './public/files/' + part.filename;
wayImage += part.filename;
var out = fs.createWriteStream(path);
part.pipe(out);
});
form.on('close', function () {
//Отправка ссылки на картинку
res.send(wayImage);
});
form.on('error', function () {
console.log('error');
});
form.parse(req);
});
Сервер скорее всего падает, так как у веб-сервера (который является EventEmitter'ом, т.е. генератором событий) нет обработчика события error
.on('error',function(){ /* ... */ })
который срабатывает, когда возникает любая ошибка запроса (соединение отвалилось, пользователь/браузер прервал запрос и т.п.)
Когда нет обработчика error, EventEmitter видя необработанное событие error, бросает исключение, которое и останавливает сервер.
Оно есть у меня. добавил код выше
С кодом стало понятней.
Как говорит документация multiparty https://github.com/pillarjs/multiparty#events
Note that an 'error' event will be emitted both from the form and from the current part.
т.е. part тоже кинет ошибку, поэтому перед part.pipe(out); надо добавить
part.on('error', function () {
console.log('part error');
// ну и закрыть out, удалить файл
});
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости