Получить неопределенную переменную, пытаясь обновить путь к загруженному файлу в MongoDB, используя angular-file-upload и MEAN.js

Если бы кто-то мог мне помочь, я был бы бесконечно благодарен. Я несколько недель бился головой о кирпичную стену, пытаясь заставить изображения загружаться так, как это демонстрируется из коробки с модулем пользователей MEAN.js. В сгенерированном пользовательском модуле файл загружается в каталог, а путь к этому файлу сохраняется в поле в документе mongodb. Я могу загрузить файл туда, куда ему нужно, используя multer и функцию загрузки файлов. Однако я не могу сохранить путь к полю в документе. Я не могу понять, как избежать получения «неопределенной» переменной. Я попытался создать службу $window и передать ей данные как глобальную переменную и кучу других вещей, и я полностью застрял.

Я прокомментировал приведенный ниже код, чтобы продемонстрировать, что не так в моей функции changeShoePicture контроллера сервера.

// This is the boilerplate code from the mean.js "users" module.
// I can not create a $window service or global variable to store the 
// shoe data below so that I can update the shoe.shoeImageURL field
// in MongoDB  with path to the successfully uploaded file. 


exports.changeShoePicture = function (req, res) {

var message = null;
var shoe = req.shoe;
var upload = multer(config.uploads.shoeUpload).single('newProfilePicture');
var profileUploadFileFilter = require(path.resolve('./config/lib/multer')).profileUploadFileFilter;

console.log('i am here', shoe); // shoe is defined here.

// Filtering to upload only images. This works and proceeds to the else condition!

upload.fileFilter = profileUploadFileFilter;
upload(req, res, function (uploadError) {   

    if(uploadError) {
    return res.status(400).send({
      message: 'Error occurred while uploading profile picture'
    });
  } else {

 //shoe image file is successfully uploaded to the location on the server,      
// However the following fails because the shoe variable is undefined.   

shoe.shoeImageURL = config.uploads.shoeUpload.dest + req.file.filename;  
      }
  });

person adamfhelm    schedule 27.07.2016    source источник
comment
Не могли бы вы добавить больше отладки, поставив больше console.log(shoe)? На основании предоставленного вами фрагмента shoe входит в объем функции загрузки.   -  person oKonyk    schedule 27.07.2016
comment
У вас есть свой код на общедоступном GitHub? Это интересный случай...   -  person oKonyk    schedule 27.07.2016


Ответы (1)


Чтобы убедиться, что я правильно понял:

Функция загрузки вызывается для ваших параметров, переданных вашим маршрутом, req и res. Вы устанавливаете переменную shoe из req.shoe.

Каковы шансы, что upload() возится с вашим запросом?

Вставьте console.log(req) сразу после того, как вызовете загрузку и отчитаетесь

person mtro    schedule 28.07.2016
comment
oKonyk был прав, переменная обуви изначально назначается правильно при вызове загрузки. В клиентском контроллере есть функция onsuccess, которая должна обрабатывать переменную отсюда. Я собираюсь продолжать копать. В шаблонном примере mean.js $window, user и т. д. есть много уровней абстракции. Документация скудна, как и примеры за пределами строгого Angular. Если кто-нибудь знает пример CRUD о том, как сохранять изображения в файловую систему с помощью multer и пути к полю в документе MongoDB, это было бы очень полезно. - person adamfhelm; 29.07.2016