Почему Multer работает некорректно?

Рейтинг: 0Ответов: 1Опубликовано: 05.02.2023

Запуская код на локальном сервере посредством OpenServer, код работает исправно - загружает изображение в папку и отправляет клиенту новое название картинки.

Но этот же код, без каких-либо изменений, после того, как я залил его на сайт (хостинг BeGet), сервер стал лишь загружать картинку в папку, но ответ клиенту так и не доходит. Спустя время в консоли браузера вылетает ошибка таймаута. В чём может быть проблема?

Вот серверная часть на node.js:


const express = require('express');
let app = express();

const path = require('path');

const PORT = 3000;
app.listen(PORT, function(err, start){
  (!err) ? console.log('Server listen port' + PORT) : console.log('error start')
});
const createPath = (page) => path.resolve(__dirname, `${page}.ejs`);

app.set('view engine', 'ejs');
app.use(express.urlencoded( { extended: false } ))


const multer = require("multer");

const MAX_SIZE = 3000000; // 3MB

const storage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, "./uploads/");
  },
  filename: function(req, file, cb) {
    cb(null, file.fieldname + "-" + Date.now() + ".png");
  }
});
const fileFilter = function(req, file, cb) {
  if (file.size > MAX_SIZE) {
    req.fileValidationError = "File size is too big";
    return cb(null, false, new Error("File size is too big"));
  }
  cb(null, true);
};

const upload = multer({
  storage: storage,
  fileFilter: fileFilter
});

app.post("/uploadAvatar", upload.single("file"), (req, res) => {
  // Файл доступен в req.file
  console.log(req.file);
  if (req.fileValidationError) {
    return res.send(JSON.stringify(req.fileValidationError));
  }else{
    return res.send(JSON.stringify(req.file.filename));
  }
  
});

Вот клиентская часть:

<body>

 

     <input id="input" type="file" src="" alt="" class="input">

    <button type="" class="btn btn-dark" id="myForm" value="Submit">button</button>
    <img class="inner"></img>

  <script>
    document.querySelector('.btn').addEventListener('click',async function(event){

      let input = document.querySelector('.input')
      const file = input.files[0];
      const reader = new FileReader();

      reader.addEventListener("load", function() {
        document.querySelector('.inner').src = reader.result;
      });

      const formData = new FormData();
            formData.append("file", file);

      reader.readAsDataURL(file);

    const res = await fetch('/uploadAvatar', {
        method: 'POST',
        body: formData
      })
    const data = await res.json()
      console.log(data)
      
    })
  </script>
    
</body>

Ответы

▲ 0Принят

Решено! На BeGet изначально установлена 8-ая версия ноды. А на моём localhost была 17. На восьмой версии multer работает нестабильно.