Прервать запрос пользователя с Node.js / formidable - PullRequest
11 голосов
/ 21 мая 2011

Я использую форму, чтобы получить файл для загрузки с помощью node.js.Я отправляю некоторые поля вместе с файлом в многочастном запросе.

Как только поступят определенные поля, я могу проверить подлинность запроса, например, и хотел бы прервать весь запрос, еслиэто неверно, чтобы не тратить ресурсы.

Я не нашел правильного способа прервать входящий запрос.Я попытался использовать req.connection.destroy(); следующим образом:

form
.on('field', function(field, value) {
    fields[field] = value;
    if (!fields['token'] || !fields['id'] || !fields['timestamp']) {
        return;
    }
    if (!validateToken(fields['token'], fields['id'], fields['timestamp'])) {
        res.writeHead(401, {'Content-Type' : 'text/plain' });
        res.end('Unauthorized');
        req.connection.destroy();
    }
})

Однако это вызывает следующую ошибку:

events.js:45
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: Cannot resume() closed Socket.
    at Socket.resume (net.js:764:11)
    at IncomingMessage.resume (http.js:254:15)
    at IncomingForm.resume (node_modules/formidable/lib/incoming_form.js:52:11)
    at node_modules/formidable/lib/incoming_form.js:181:12
    at node_modules/formidable/lib/file.js:51:5
    at fs.js:1048:7
    at wrapper (fs.js:295:17)

Я также пытался req.connection.end(), но файл продолжает загружаться.

Есть мысли?Заранее спасибо!

1 Ответ

5 голосов
/ 30 октября 2011

Проблема в том, что грозный не понял, что вы хотите, чтобы это прекратилось.Попробуйте это:

req.connection.destroy();
req.connection.resume = function(){};

Конечно, это несколько уродливый обходной путь, я бы открыл вопрос на github .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...