Я не могу загружать файлы через 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 и просто объект но ничего не получается. Заранее спасибо.