Estou tentando construir um servidor web em node.js que oferecerá suporte a scripts de domínio cruzado, enquanto ainda fornece arquivos estáticos de um diretório público. Estou usando o express.js e não tenho certeza de como permitir scripting entre domínios ( Access-Control-Allow-Origin: *
).
Eu vi este post , que não achei útil.
var express = require('express')
, app = express.createServer();
app.get('/', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.configure(function () {
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(app.router);
});
app.configure('development', function () {
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function () {
var oneYear = 31557600000;
// app.use(express.static(__dirname + '/public', { maxAge: oneYear }));
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler());
});
app.listen(8888);
console.log('express running at http://localhost:%d', 8888);
Respostas:
Confira o exemplo de enable-cors.org :
A primeira chamada (
app.all
) deve ser feita antes de todas as outras rotas em seu aplicativo (ou pelo menos aquelas que você deseja habilitar para CORS).[Editar]
Se você quiser que os cabeçalhos apareçam também para arquivos estáticos, tente fazer isso (certifique-se de que seja antes da chamada para
use(express.static())
:Testei isso com o seu código e obtive os cabeçalhos dos recursos do
public
diretório:Você pode, é claro, empacotar a função em um módulo para fazer algo como
fonte
use
ingapp.router
antesexpress.static
que ele não modificar os cabeçalhos de arquivos estáticos; de qualquer forma, atualizei minha resposta para que funcione.Seguindo a solução @Michelle Tilley, aparentemente não funcionou para mim no início. Não sei por que, talvez eu esteja usando o Chrome e uma versão diferente do nó. Depois de fazer alguns pequenos ajustes, agora está funcionando para mim.
No caso de alguém enfrentar um problema semelhante ao meu, isso pode ser útil.
fonte
Tente este CORS módulos NPM.
Este módulo fornece muitos recursos para ajustar a configuração de cors, como lista de permissões de domínio, habilitando cors para apis específicos, etc.
fonte
Eu uso isso:
este código assume que seus controladores estão localizados no diretório de controladores. cada arquivo neste diretório deve ser algo assim:
fonte
Recomende o uso do módulo cors express. Isso permite que você coloque domínios na lista de permissões, permita / restrinja domínios especificamente para rotas, etc.,
fonte
Você deve definir
Access-Control-Allow-Credentials: true
, se quiser usar "cookie" via "Credenciais"fonte
});
Adicione este código em seu arquivo index.js ou server.js e altere a matriz de origem permitida de acordo com sua necessidade.
fonte
Uma etapa adicional que precisei realizar foi mudar meu URL de
http://localhost
parahttp://127.0.0.0
fonte