X - ошибка: ошибка: запрос отменен - ​​NodeJs multipart - PullRequest
0 голосов
/ 20 февраля 2020

Я делаю предпосылку, я не фронтенд-разработчик или NodeJS эксперт. У меня проблема с nodejs при попытке загрузить файл. Это происходит в недетерминированном режиме c, иногда запрос в порядке и иногда возвращает ошибку в заголовке. На моих локальных машинах эта ошибка случается редко, но в серверной среде это происходит чаще всего. Возвращена ошибка:

 executeRetriveMultipart() on response
    RESPONSE.statusCode: 200
     ~ progress: 0/5898177
     ~ progress: 8701/5898177
     > fileBegin  name:IDC_FILE  file:[object Object]
     > fileBegin  name:PARAMETERS_FILE  file:[object Object]
     > fileBegin  name:INDEX_FILE  file:[object Object]
     < file  name:IDC_FILE  file:[object Object]
     ~ progress: 74237/5898177
     > fileBegin  name:DATA_FILE  file:[object Object]
     < file  name:INDEX_FILE  file:[object Object]
     ~ progress: 139773/5898177
     < file  name:PARAMETERS_FILE  file:[object Object]
     ~ progress: 205309/5898177
     ~ progress: 270845/5898177
     ~ progress: 336381/5898177
     ~ progress: 400623/5898177
     ~ progress: 466159/5898177
     X - aborted
     X - error:  Error: Request aborted
        at IncomingMessage.<anonymous> (/opt/ndoc/js/apps/frontend/node_modules/formidable/lib/incoming_form.js:122:19)
        at emitNone (events.js:86:13)
        at IncomingMessage.emit (events.js:185:7)
        at Socket.socketCloseListener (_http_client.js:275:13)
        at emitOne (events.js:101:20)
        at Socket.emit (events.js:188:7)
        at TCP._handle.close [as _onclose] (net.js:501:12) Error: Request aborted
        at IncomingMessage.<anonymous> (/opt/ndoc/js/apps/frontend/node_modules/formidable/lib/incoming_form.js:122:19)
        at emitNone (events.js:86:13)
        at IncomingMessage.emit (events.js:185:7)
        at Socket.socketCloseListener (_http_client.js:275:13)
        at emitOne (events.js:101:20)
        at Socket.emit (events.js:188:7)
        at TCP._handle.close [as _onclose] (net.js:501:12)
    { fields: {},

Я пытаюсь добавить некоторые таймауты запросов и сокетов, но безуспешно. Часть кода, которая обрабатывает загрузку с помощью multipart, приведена ниже:

var serviceOptions = {url: URL,headers: headers,timeout: 60000};
...
// EXECUTOR
executeRetriveMultipart({
    debug: DEBUG,
    serviceOptions: serviceOptions,
    destinationFolder: destinationFolder,
    callback: __makeOneShotWrapper(cb)
}
...

function executeRetriveMultipart (opts) {
    var DEBUG = opts.debug;
    var callback = opts.callback;
    var execID = 'RetriveMultipart-'+(new Date().valueOf());
    if (DEBUG) console.time(execID);
    try {
        req.on('response', function (response) {    // fired when the headers are returned
            if (DEBUG) console.log("executeRetriveMultipart() on response");
            var statusCode = response && response.statusCode || 0;
            if (statusCode != 200) {
                if (DEBUG) console.error("Errore RetriveMultipart (statusCode != 200): "+statusCode);
                return callback(new Error("Errore RetriveMultipart (statusCode != 200): "+statusCode));
            }
        if (DEBUG) inspect(statusCode,"RESPONSE.statusCode");

        /*For me the error happens here*/    
        var form = new formidable.IncomingForm();  
        form.uploadDir = opts.destinationFolder;
        form.keepExtensions = true;

        if (DEBUG) attachListeners(form);
        form.parse(response, function(err, fields, files) {
            if (DEBUG) console.log(util.inspect({fields: fields, files: files}));

            if (DEBUG) {
                console.log("RetriveMultipart form.parse complete" + (err ? ' .. with ERROR!' : '.'));
        }
        var resultFiles = {};
        try {
            ["IDC_FILE","PARAMETERS_FILE","INDEX_FILE","DATA_FILE"].forEach(function (file) {
            resultFiles[file] = {
            path: files[file].path,
            name: files[file].name,
            type: files[file].type,
            size: files[file].size
            };
        });
        setTimeout(function(){
            callback(null, {
            files: resultFiles
            });
        },0);
    }
    catch (e) {
    callback(new Error("Error evaluating multipart response: "+e));
    }

Для дополнительной информации я использую эту версию библиотек:

 NodeJS: 13.7.0

      "async": "~0.9.0",
        "bunyan": "0.21.2",
        "connect-redis": "^4.0.4",
        "crypto-js": "~3.1.2-5",
        "data2xml": "0.8.0",
        "express": "3.4.4",
        "express-params": "0.0.3",
        "express-session": "^1.17.0",
        "eyes": "0.1.8",
        "form-data": "~0.1.4",
        "formidable": "^1.2.1",
        "http-proxy": "~1.16.2",
        "jade": "0.30.0",
        "jsonfile": "~2.0.0",
        "less-middleware": "0.1.12",
        "mkdirp": "0.3.5",
        "mocha": "1.3.0",
        "moment": "2.0.0",
        "redis": "^3.0.2",
        "request": "~2.40.0",
        "riak-js": "0.9.3",
        "should": "1.2.1",
        "simple-errors": "0.0.4",
        "stream": "0.0.2",
        "underscore": "~1.6.0",
        "vows": "0.7.0",
        "xml2js": "0.2.3",
        "xtend": "1.0.3"

Я не являюсь разработчиком внешнего интерфейса. не хотел бы переходить с express 3 на express 4, потому что это приводит к большой корректировке исходного кода.

Большое спасибо всем за поддержку

...