Próbuję zbudować serwer WWW w node.js, który będzie obsługiwał skrypty międzydomenowe, jednocześnie dostarczając statyczne pliki z katalogu publicznego. Używam express.js i nie jestem pewien, jak zezwolić na wykonywanie skryptów międzydomenowych ( Access-Control-Allow-Origin: *
).
Widziałem ten post , który nie był pomocny.
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);
"Access-Control-Allow-Origin", "*"
sprawia, że Twój interfejs API jest interesujący dla aplikacji phishingowych. Rozważ zezwolenie tylko na znane źródła.Odpowiedzi:
Zobacz przykład z enable-cors.org :
Pierwsze wywołanie (
app.all
) należy wykonać przed wszystkimi innymi trasami w Twojej aplikacji (lub przynajmniej tymi, dla których chcesz włączyć mechanizm CORS).[Edytować]
Jeśli chcesz, aby nagłówki pojawiały się również dla plików statycznych, spróbuj tego (upewnij się, że jest to przed wywołaniem
use(express.static())
:Przetestowałem to z twoim kodem i uzyskałem nagłówki zasobów z
public
katalogu:Możesz oczywiście spakować funkcję w moduł, abyś mógł zrobić coś takiego
źródło
use
ingapp.router
wcześniejexpress.static
, że nie modyfikować nagłówki dla plików statycznych; w każdym razie zaktualizowałem odpowiedź, aby działała.Po rozwiązaniu @Michelle Tilley najwyraźniej na początku nie zadziałało. Nie wiem dlaczego, może używam Chrome i innej wersji node. Po wprowadzeniu kilku drobnych poprawek, teraz działa dla mnie.
W przypadku, gdy ktoś ma podobny problem jak mój, może to być pomocne.
źródło
Spróbuj tego cors npm moduły.
Ten moduł zapewnia wiele funkcji umożliwiających precyzyjne dostrojenie ustawień procesorów, takich jak biała lista domen, włączanie sterowników dla określonych interfejsów API itp.
źródło
Używam tego:
ten kod zakłada, że kontrolery znajdują się w katalogu kontrolerów. każdy plik w tym katalogu powinien wyglądać mniej więcej tak:
źródło
Polecam korzystanie z modułu cors express. Pozwala to na umieszczanie domen na białej liście, zezwalanie / ograniczanie domen specjalnie do tras itp.,
źródło
Musisz ustawić
Access-Control-Allow-Credentials: true
, jeśli chcesz używać „cookie” poprzez „Poświadczenia”źródło
});
Dodaj ten kod do pliku index.js lub server.js i zmień dozwoloną tablicę pochodzenia zgodnie z wymaganiami.
źródło
Dodatkowym krokiem, który musiałem wykonać, było przełączenie adresu URL z
http://localhost
nahttp://127.0.0.0
źródło