коллеги-разработчики!
Я отправляю запрос PUT данных формы на свой сервер для загрузки фотографии. Вот код:
router.put("/profile-pic/new/:id", async (req, res, next) => {
try {
let user = await User.findById(req.params.id);
if (!user) return res.status(404).send("User not found...");
let form = new formidable.IncomingForm();
form.keepExtensions = true;
form.parse(req, async (err, fields, files) => {
if (err) return res.status(400).send("Image could not be uploaded.");
else if (files.profilePic) {
if (files.profilePic.size > 1000000) {
return res.status(400).send("Image can not be larger than 1MB");
}
await User.findByIdAndUpdate({ _id: user.id }, {
profilePic: {
data: fs.readFileSync(files.profilePic.path),
contentType: files.profilePic.type
}
}, { useFindAndModify: false });
}
});
res.send("Image uploaded successfully.");
} catch (ex) {
console.error(ex);
next();
}
});
До сих пор я делал это приложение, используя Chrome, и там все запросы к серверу работают отлично. Закачиваю картинки и все без проблем. Я хотел протестировать приложение в Mozilla, чтобы проверить, сделал ли я какие-либо ошибки стиля или макета, только чтобы узнать, что мои данные формы не анализируются правильно или, по крайней мере, не каждый раз. Когда я пытаюсь загрузить картинку, я получаю такую ошибку:
(node:9388) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:485:11)
at ServerResponse.header (C:\Users\Lenovo\Desktop\InstaCringe\server\node_modules\express\lib\response.js:771:10)
at ServerResponse.send (C:\Users\Lenovo\Desktop\InstaCringe\server\node_modules\express\lib\response.js:170:12)
at C:\Users\Lenovo\Desktop\InstaCringe\server\routes\user.js:64:45
at IncomingForm.<anonymous> (C:\Users\Lenovo\Desktop\InstaCringe\server\node_modules\formidable\lib\incoming_form.js:104:9)
at IncomingForm.emit (events.js:210:5)
at IncomingForm._error (C:\Users\Lenovo\Desktop\InstaCringe\server\node_modules\formidable\lib\incoming_form.js:298:8)
at IncomingMessage.<anonymous> (C:\Users\Lenovo\Desktop\InstaCringe\server\node_modules\formidable\lib\incoming_form.js:134:14)
at IncomingMessage.emit (events.js:215:7)
at endReadableNT (_stream_readable.js:1184:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21)
(node:9388) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:9388) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Я перепробовал все, что мог придумать, и ничего. Итак, я просто хочу знать, что здесь происходит на Земле ... У меня нет необработанных отклонений обещаний, поскольку я оборачиваю каждый маршрутизатор в блок try-catch и вызываю обработчик ошибок, если есть отклоненное обещание, поэтому я понятия не имею что происходит. Я также не устанавливаю никаких заголовков. И как он работает абсолютно безупречно при использовании гугл Chrome и выкидывании ошибки в Mozilla. Также стоит упомянуть, что в Mozilla изображение загружается 1 раз из 10.
Думаю, я хочу знать, совершаю ли я какую-то глупую ошибку или это просто Mozilla, являющаяся Mozilla?