2016-01-29 10 views
5

Pracuję nad małą aplikacją, używając Angular2. W obiekcie NPM jest 5min. Quickstart Guide, który służy do instalacji wymaganych modułów i uruchomienia serwera LITE. Później chcę korzystać z tej aplikacji na normalnym serwerze internetowym i budować aplikacje mobilne z cordova. Jakkolwiek, używam apletu REST do załadowania niektórych danych. Jak mogę skonfigurować serwer LITE, aby rozwiązać CORS opcje przed lotem? Mój serwer apache (na serwerze dedykowanym) jest już skonfigurowany, ale nie chcę zatwierdzać, aktualizować i rekompilować każdej małej zmiany. Potrzebuję odpowiedniej konfiguracji do tego:npm start - używając CORS

Header always set Access-Control-Allow-Origin "https://my-domain.net:12345" 
Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding" 
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT" 
Header always set Access-Control-Max-Age "1000" 
+1

za to, co rozumiem w architekturze znaleźć swoją lite-serwer służy jedynie aplikacji klient/przeglądarki, statycznej treści, takie jak skrypty js, css i html, tych plików będzie żądał danych na twój serwer tomcat poprzez wywołania http, te połączenia są tymi, które mogą dać błąd CORS, jeśli serwer tomcat nie dodaje tych nagłówków do odpowiedzi, więc naprawdę nie musisz konfigurować serwera LITE, ty nie robisz żądań z serwera tomcat do serwera zawartości statycznej, prawda? – Langley

+0

hmm, robię wywołania REST z serwera LITE na mój serwer główny (który znajduje się w innej domenie niż lokalny serwer WWW). I zawsze mam błąd CORS. Sprawdź odpowiedź Thierrysa; Teraz działa. – letmejustfixthat

Odpowiedz

5

Nie ma wbudowanej opcji, aby to zrobić w ramach serwera LITE. Powiedział, że można ją załatać, ale ja naprawdę nie zobaczyć, co starają się zrobić tutaj ...

Po zainstalowaniu go, można przejść do folderu node_modules/lite-server i zainstalować moduł connect-cors:

npm install connect-cors 

Następnie w lib/lite-server.js file można zaimportować moduł i używać go tablicę middleware po:

var historyFallback = require('connect-history-api-fallback'); 
var log = require('connect-logger'); 
var cors = require('connect-cors'); // <------------------ 
(...) 

sync.init({ 
    port: argv.port || 3000, 
    server: { 
    baseDir: options.baseDir, 
    middleware: [ 
     cors(), // <------------------ 
     log(), 
     historyFallback({ index: options.fallback }) 
    ] 
    }, 
    files: options.files, 
}); 

Uruchamiając serwer za pomocą następującego polecenia wsparcie CORS jest użyteczny:

./bin/lite-server --baseDir ../../ 

Dodanie nagłówka Origin do żądań spowoduje wyświetlenie nagłówków CORS w odpowiedzi.

+0

To wystarczy.A to, co robię, rozwija się na mojej lokalnej maszynie zamiast na moim serwerze (jak powiedziałem, nie chciałem wprowadzać każdej zmiany, a jeśli nagłówki są poprawne, to nie zadziała), dziękuję. – letmejustfixthat

2

w rzeczywistości lite-server jest tylko opakowaniem synchronizacji przeglądarki, jeśli możesz sprawdzić dokumenty od https://www.browsersync.io/docs/options, możesz znaleźć konfigurację cors, a ponieważ obsługa Lite-server używa pliku konfiguracyjnego do ustawienia opcji, wszystko co musisz zrobić, to po prostu ustawić plik konfiguracyjny dla lite-server, możesz wybrać bs-config.js lub bs-config.json, jeśli użyjemy najłatwiejszego bs-config.json, contente to:

{ 
    "cors": true 
} 

wtedy bezpośrednio rozpocząć lite-serwer, można zobaczyć:

przeglądarka synchronizacji config

{ injectChanges: false, 
    files: [ './**/*.{html,htm,css,js}' ], 
    watchOptions: { ignored: 'node_modules' }, 
    server: { baseDir: './', middleware: [ [Function], [Function] ] }, 
    cors: true } 

[BS] URL dostępu:

Local: http://localhost:3000 

Oznacza to Cors działa.

+3

to nie działa, nagłówek 'Access-Control-Allow-Origin' nadal nie jest wysyłany – wodzu

1

I z serwera HTTP

http-server -o --cors