NodeJS - загрузка с использованием Multer с обещанием - PullRequest
0 голосов
/ 12 ноября 2019

В последнее время я переписывал свой очень простой сервер. Я представлял обещания, и последняя часть моего переписывания - реализация моих методов публикации, которые включают использование Multer для загрузки изображений. Это то, что я до сих пор. GET работает отлично, как и POST, когда я удаляю часть загрузки изображения. К сожалению, когда я представляю Multer, я получаю эту ошибку:

TypeError: Cannot convert object to primitive value
   at exports.format (util.js:91:18)
   at Console.log (console.js:46:37)
   at Object.createACategory (/root/api/controllers/controller.js:34:18)

Вот мой класс Route, где я вызываю POST:

'use strict';
module.exports = function(app, gameCategoryList) {
  var multer = require('multer');

  var storage =   multer.diskStorage({
    destination: function (req, file, callback) {
      callback(null, '/var/www/html/uploadsCategoryIcon');
    },
    filename: function (req, file, callback) {
      var originalname = file.originalname;
      var extension = originalname.split(".");
      callback(null, extension[0] + '-' + Date.now() + '.' + extension[extension.length-1]);
    }
  });

  var upload = multer({ storage: storage });

  app.get('/api/gameCategories', (req, res) => {
    gameCategoryList.listAllCategories().then(category => res.json(category));
  });

  app.post('/api/createGameCategory', upload.single('gameCategoryImage'), (req, res) => {
    gameCategoryList.createACategory(req.body, req.file).then(category => res.json(category));
  });

};

Так выглядит метод в моем контроллерекласс:

createACategory(body, file) {
         var splitPath = file.path.split("html");
         var imagePath = 'example.com' + splitPath[1];

         var new_category = new Category({
           categoryName: body.categoryName,
           categoryTag: body.categoryTag,
           categoryImageUrl: imagePath
         });

         return new Promise(function(resolve, reject) {

           new_category.save(function(err, category) {
             if (err) {
               return reject(err)
             } else {
               return resolve(category)
             }
           });

          }).then((category) => {

            if(category)
            {
              return category
            }
            else
            {
              return { success: false }
            }
          });
       }

ОБНОВЛЕНИЕ:

В строке 34 файла controller.js есть:

var new_category = new Category({
   categoryName: body.categoryName,
   categoryTag: body.categoryTag,
   categoryImageUrl: imagePath
});

Когда я удаляю часть изображения этого кода (categoryImageUrl: imagePath)) и не передавайте файлы или изображения, этот код работает нормально.

...