Сервер - 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, удалить файл
});
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Можете предложить альтернативу функции PHP file_get_contents на javascript?