Задача подключения 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;
}
},
},