AngularJS + SailsJS ng-файл-загрузка

не могли бы вы порекомендовать мне пример Sails.Js + Angular.js для загрузки файлов на сервер и последующего их просмотра. Я рассмотрел много примеров, но ни один из них не подходит. Когда я пытаюсь загрузить каждый раз, когда я получаю сообщение об ошибке в консоли:

XMLHttpRequest не может загрузить localhost:1337/анализ/загрузку. Ответ на предварительный запрос не проходит проверку управления доступом: заголовок «Access-Control-Allow-Origin» содержит недопустимое значение «». Таким образом, Origin localhost:3000 не имеет доступа.

часть моего контроллера AngularJS (с модулем ng-file-upload):

    $scope.upload = function (file) {
    Upload.upload({
        url: AppSettings.serverUrl+'/analyzes/upload',
        data: {file: file}
    }).then(function (resp) {
        console.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data);
    }, function (resp) {
        console.log('Error status: ' + resp.status);
    }, function (evt) {
        var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
        console.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);
    });
};

Мой HTML:

<div class="button" ngf-select="upload($file)">Upload on file select</div>

И мой контроллер Sails.JS (тоже у меня пустая модель): module.exports = {

  upload: function  (req, res) {
    req.file('analyzes').upload(function (err, files) {

      if (err)
        return res.serverError(err);

      return res.json({
        message: files.length + ' file(s) uploaded successfully!',
        files: files
      });
    });
  }
};

Я чувствую, что источник проблемы в том, что я использую отдельный URL-адрес для отображения веб-сайта (localhost: 3000) и другого для Sails.Js (localhost: 1337).

Я использую этот https://github.com/jakemmarsh/angularjs-gulp-browserify-boilerplate для внешнего интерфейса

И извините за мой английский.


person Дмитрий Краснов    schedule 13.07.2016    source источник


Ответы (1)


Ты прав; проблема связана с тем, что ваше приложение Sails не разрешает localhost: 3000. Ознакомьтесь с документацией по адресу http://sailsjs.org/documentation/reference/configuration/sails-config-cors.

По сути, вам нужно разрешить localhost: 3000 через CORS. Из приведенной выше документации

'/foo/bar': {
  target: 'FooController.bar',
  cors: {
    origin: 'http://foobar.com,https://owlhoot.com',
    methods: 'GET,PUT,POST,OPTIONS,HEAD'
  }
}

где origin в вашем случае — это http://localhost:3000. А также не забудьте заменить маршрут конечной точки и target.

person Kevin Le    schedule 13.07.2016
comment
Спасибо за ответ. Однако я не знаю, какой код должен быть в FooController.bar. Может быть у вас есть пример ?? - person Дмитрий Краснов; 13.07.2016
comment
я помещаю этот код module.exports = function (req, res, next) {sails.log.debug (Header GO); res.header('Access-Control-Allow-Origin', 'localhost:3000'); res.header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type'); res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS, HEAD'); следующий(); }; и ничего не произошло - person Дмитрий Краснов; 13.07.2016
comment
Вы вставили предложенный код (с изменениями, необходимыми для вашего случая) в /config/cors.js? Вы не должны создавать FooController, это просто пример. Синтаксис там в основном YourControllerName.yourFunctionName... - person Fissio; 14.07.2016
comment
@ДмитрийКраснов Я бы прочитал и убедился, что вы понимаете, что происходит в приведенной выше документации, на которую я дал ссылку. Вы, вероятно (крайне вероятно), столкнетесь с большими проблемами, просто скопировав и вставив код конфигурации, который вы найдете в Интернете. - person Kevin Le; 16.07.2016
comment
большое спасибо за вашу отзывчивость. Я очень понимаю, что копипастить никак нельзя. В моем проекте, когда я помещаю этот код '/analyzes/upload': {controller: AnalyzesController, cors: {origin: 'localhost:3000', методы: 'GET,PUT,POST,OPTIONS,HEAD' } } в config/polices.js, отправляются на поиск policys/AnalyzesController.js. И еще вариант - поменять cors.js, но все вариант не работает. Мне действительно нужен хороший и полный пример. - person Дмитрий Краснов; 18.07.2016