Задача подключения Grunt и промежуточное ПО Access-Control-Allow-Origin

Я хотел бы разрешить доступ к перекрестным вызовам, которые мне нужно, чтобы выполнять вызовы API для отдыха на сервере.

Моя задача grunt подключения сконфигурирована следующим образом:

    connect: {
  options: {
    port: 9000,
    // Change this to '0.0.0.0' to access the server from outside.
    hostname: 'localhost',
    livereload: 35729,
    middleware: function(connect, options, next) {
      return [
        function(req, res, next) {
          res.setHeader('Access-Control-Allow-Origin', '*');
          res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
          res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
          next();
        }
      ];
    }
  },
},

Когда я запускаю сервер grunt, я получаю Cannot GET /. Без конфигурации промежуточного программного обеспечения приложение работает, и файл индекса загружается правильно.

Не могли бы вы привести меня к тому, что я делаю неправильно или пропуская?

Более подробная информация о моем файле grunt заключается в том, что я использую почтовое приложение yoman angular в качестве базы для приложения.

Ответ 1

Попробуйте что-то вроде этого:

connect: {
  options: {
    port: 9000,
    // Change this to '0.0.0.0' to access the server from outside.
    hostname: 'localhost',
    livereload: 35729,

    // remove next from params
    middleware: function(connect, options) {
      return [
        function(req, res, next) {
          res.setHeader('Access-Control-Allow-Origin', '*');
          res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
          res.setHeader('Access-Control-Allow-Headers', 'Content-Type');

          // don't just call next() return it
          return next();
        },

        // add other middlewares here 
        connect.static(require('path').resolve('.'))

      ];
    }
    },
    },

Ответ 2

Поклониться, чтобы подставить меня на путь правильного ответа. Здесь будет работать формат ответа на аналогичный вопрос.

Замените "next" на middlewares и нажмите анонимную функцию в массив промежуточного программного обеспечения, прежде чем возвращать его:

middleware: function(connect, options, middlewares) {

    middlewares.unshift(function(req, res, next) {
        res.setHeader('Access-Control-Allow-Credentials', true);
        res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
        next();
    });

    return middlewares;
}

Ответ 3

connect: {
  options: {
    port: 9000,
    // Change this to '0.0.0.0' to access the server from outside.
    hostname: 'localhost',
    livereload: 35729,
    middleware: function(connect, options, next) {
      return [
        function(req, res, next) {
         res.header('Access-Control-Allow-Credentials', true);
         res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
         res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
         next();
      }];
     }
   };

это поможет вам получить доступ к вызову Access-Control-Allow-Credentials

Ответ 4

Соединение Grunt поставляется с несколькими посредниками, хранящимися как функции в массиве. Когда вы устанавливаете промежуточное программное обеспечение, возвращая массив, вы переопределяете существующее промежуточное программное обеспечение, ответственное за обслуживание ваших страниц.

Отправляя комментарий ansorensen документации, https://github.com/gruntjs/grunt-contrib-connect#middleware соответствующий раздел.

options: {
    middleware: function(connect, options, middlewares) {
      // inject a custom middleware into the array of default middlewares
      middlewares.unshift(function(req, res, next) {
        if (req.url !== '/hello/world') return next();

        res.end('Hello, world from port #' + options.port + '!');
      });

      return middlewares;
    },
},

Middleware ранее в массиве вступают в силу до тех пор, пока в массиве не будет.

Так что вы хотите, чтобы

connect: {
    options: {
        port: 9000,
        // Change this to '0.0.0.0' to access the server from outside.
        hostname: 'localhost',
        livereload: 35729,

        // remove next from params
        middleware: function(connect, options, middlewares) {
            middlewares.unshift(function(req, res, next) {
                res.setHeader('Access-Control-Allow-Origin', '*');
                res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
                res.setHeader('Access-Control-Allow-Headers', 'Content-Type');

                return next();
            });

            return middlewares;
        }
    },
},