Я пытаюсь загрузить файлы в свою базу данных, но у меня возникают проблемы.
Когда я пытаюсь загрузить файл в свою базу данных, я получаю эту ошибку: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
И данные из моего файла не сохраняются в моей базе данных (см. Изображение):
Я думаю, что моя проблема здесь:
const fileData = {
type: req.body.type,
name: req.body.name,
data: req.body.data
};
I попытался скопировать функцию, которую я использую для создания пользователя, когда он регистрируется, но для файла, когда кто-то загружает его.
Регистрация (работает):
users.post("/register", (req, res) => {
const today = new Date();
const userData = {
first_name: req.body.first_name,
last_name: req.body.last_name,
email: req.body.email,
password: req.body.password,
phone: req.body.phone,
deliveryAddress: req.body.deliveryAddress,
created: today
};
User.findOne({
where: {
email: req.body.email
}
})
//TODO bcrypt
.then(user => {
if (!user) {
bcrypt.hash(req.body.password, 10, (err, hash) => {
userData.password = hash;
User.create(userData)
.then(user => {
res.json({ status: user.email + " registered!" });
})
.catch(err => {
res.send("error: " + err);
});
});
} else {
res.status(400).json({ error: "Email already taken" });
console.log("Email already taken !");
}
})
.catch(err => {
res.status(400).json("Error : " + err);
});
});
Загрузка файла (не работает):
app.post("/files", (req, res) => {
const uploadFile = req.files.file;
const fileName = req.files.file.name;
const fileData = {
type: req.body.type,
name: req.body.name,
data: req.body.data
};
uploadFile.mv(`./uploads/${fileName}`, function(err) {
if (err) {
return res.status(500).send(err);
}
res.json({
file: `uploads/${fileName}`
});
});
Upload.findOne({
where: {
name: req.body.name
}
})
.then(file => {
if (!file) {
Upload.create(fileData)
.then(file => {
res.json({ status: file.name + " created !" });
})
.catch(err => {
res.send("error: " + err);
});
} else {
res.status(400).json({ error: "File already uploaded" });
console.log("File already uploaded");
}
})
.catch(err => {
res.status(400).json("Error : " + err);
});
});
Я не очень знаком с бэкэндом, поэтому ... Я попытался изменить:
const fileData = {
type: req.body.type,
name: req.body.name,
data: req.body.data
};
с помощью
const fileData = {
type: req.files.file.type,
name: req.files.file.name,
data: req.files.file.data
};
Но я получил бесконечное число l oop, и файл не загружен в мою базу данных (ничего не создано).
Загрузка в бэкэнд (папка загрузки) работает.
РЕДАКТИРОВАТЬ
Когда я использую req.files.file.something
для fileData, он иногда работает, файл корректно загружается в базу данных, но я снова получаю сообщение об ошибке (думаю, что это работает, когда T файл очень маленький).
Для файла 1 Ко:
Executing (default): INSERT INTO `files` (`id`,`name`,`data`,`createdAt`,`updatedAt`) VALUES (DEFAULT,'a suprimer.html',X'3c21444f43545950452068746d6c3e0d0a0d0a3c21444f43545950452068746d6c3e0d0a3c68746d6c3e0d0a3c686561643e200d0a093c6d65746120636861727365743d227574662d38223e0d0a093c7469746c653e20466169726520756e6520696d6167653c2f7469746c653e0d0a3c2f686561643e0d0a3c626f64793e0d0a0d0a093c703e746573743c2f703e0d0a0d0a093c696d67207372633d2268642e696d6167652e736e6f772e6a706567223e0d0a090d0a0d0a3c2f626f64793e0d0a3c2f68746d6c3e','2020-01-29 10:07:28','2020-01-29 10:07:28');
И в базе данных:
Почему тип не настроен? Как я могу уменьшить время загрузки файла большего размера?