Я не могу загружать файлы через ajax на express.js

у меня есть приложение на express и я со стороны клиента отправляю через ajax файлы, но на сервере файлы не отображаются, я имею ввиду они не сохраняются.

app.post('/add-object', jsonParser, middleware.changeFiles, 
    upload.array('files'), (req, res) => {
        if (!req.body) res.sendStatus(400);
        else res.sendStatus(200);
    
        console.log(req.body)
    }
);

Отправка данных на клиенте:

sendBtn.onclick = () => {
    const data = new FormData(document.getElementById('data'))
    data.delete('obj-file');
    
    if (data.get('obj-name') == '' & data.get('obj-name') == ' ') {
        console.log('error');
        return;
    }
    if (files.length == 0) {
        console.log('error');
        return;
    }
    console.log(createReqObj(data, files))
    request('POST', '/add-object', createReqObj(data, files), res => {
        console.log(res.status, res.response);
    }
);

Функция request:

function request (method, url, send_data, callback) {
    const xhr = new XMLHttpRequest();
    xhr.open(method, url);

    if (method === 'POST') xhr.setRequestHeader('Content-Type', 'multipart/form-data');

    xhr.onload = () => {
        callback(xhr);
    }
    
    xhr.send(send_data)
}

Функция формирование объекта для post запроса:

function createReqObj (data, files) {
    let obj = {};

    for (const [key, value] of data) {
        obj[key] = value;
    }

    obj['fileCount'] = files.length;

    files.forEach( (file, i) => {
        obj[`file${i}`] = file;
    });

    return obj;
}

Multer:

const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, 'files/')
      },
      filename: (req, file, cb) => {
        const { originalname } = file
        cb(null, originalname)
      }
})

module.exports = multer({ storage: storage });

Middleware для изменения запроса:

changeFiles (req, res, next) {
    req.body['files'] = [];
    console.log(req.body)
    for (let i = 0; i < req.body.fileCount; i++) {
        req.body.files.push(req.body[`file${i}`]);
    }
    next();
} 

Я пытался отправлять в формате json и просто объект но ничего не получается. Заранее спасибо.


Ответы (0 шт):