Ativar solicitações POST / REST em grunt-contrib-connect

Minha tarefa

Zombar de algumas respostas de API com grunt-contrib-connect e algumas funções de middleware customizadas .

Meu problema

405 Method not allowed respostas para solicitações POST

Vamos começar a festa.

Primeira abordagem ingênua (pesquisa stackoverflow, c & p):

  • adicione uma função que define todos os cabeçalhos HTTP necessários
var enableREST = function(req, res, next){
res
.setHeader('Access-Control-Allow-Origin', req.headers.origin);
res
.setHeader('Access-Control-Allow-Credentials', true);
res
.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,PUT,PATCH,POST,DELETE');
res
.setHeader('Access-Control-Allow-Headers', req.headers['access-control-request-headers']);

return next();
};
  • adicione essa função a middlewares grunt-contrib-connect
connect: {
server
: {
options
: {
middleware
: function(connect, options, middlewares) {
middlewares
.push(enableREST);
}
}
}
}

Não saiu tão bem. Mesmo várias outras combinações de cabeçalho não funcionaram. Ainda a mesma resposta: 405 Method not allowed.

Minha Solução

Depois de um tempo e algumas revisões de código, encontrei este ‘ pequeno retorno; trap ’em expressjs / serve-index contornando meu middleware personalizado.

Tudo que eu tive que fazer foi enfileirar-se enableREST()na frente serveIndex(), unshifting em vez de empurrá-lo para a matriz de middlewares:

connect: {
server
: {
options
: {
middleware
: function(connect, options, middlewares) {
middlewares
.unshift(enableREST);
}
}
}
}

Resposta: 200 OK