2013-01-05 13 views
33

Mam kilka statycznych stron obsługiwanych przez Express.JS. Konfiguracja jest prosta:Wysyłaj dodatkowe nagłówki http za pomocą Express.JS

var app = express(); 

app.configure(function(){ 
    app.use(express.static(path.join(application_root, "StaticPages"))); 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

Chcę odpowiedź na to dodatkowe nagłówek HTTP (Access-Control-Allow-Origin: *). Gdzie należy go umieścić? Próbowałem poniżej próbki, ale oczywiście pojawia się nagłówek tylko na stronie domyślnej:

app.get('/', function(req, res){ 
    res.setHeader("Access-Control-Allow-Origin", "*"); 
    res.send('Hello World'); 
}); 

Dzięki.

+1

Dla tych, którzy szukają sposobu, aby ustawić niestandardowy nagłówek na trasie i 'res.setHeader' nie jest zdefiniowana, użyj' res.set' lub 'res.header'. http://expressjs.com/en/api.html#res.set – AndyPerlitch

Odpowiedz

48

Próbowałem poniżej próbki, ale oczywiście pojawia się nagłówek tylko na domyślnej stronie

Tak, to dlatego, że określono ją tylko na trasie GET / a nie dla innych ścieżek. Zamiast tego należy użyć oprogramowania pośredniego.

Jeśli chcesz ustawić nagłówek dla wszystkich żądań:

app.configure(function(){ 
    app.use(function(req, res, next) { 
    res.setHeader("Access-Control-Allow-Origin", "*"); 
    return next(); 
    }); 
    app.use(express.static(path.join(application_root, "StaticPages"))); 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

Jeśli tylko chcesz to zrobić dla statycznych folderach, nie istnieje ogólna metoda. Prawdopodobnie możesz zmienić plik express.static (który pochodzi z connect.static). Innym sposobem na to jest dopasowanie adresów URL i ustawienie nagłówka, jeśli adres URL jest dopasowany.

app.configure(function(){ 
    app.use(function(req, res, next) { 
    var matchUrl = '/StaticFolder'; 
    if(req.url.substring(0, matchUrl.length) === matchUrl) { 
     res.setHeader("Access-Control-Allow-Origin", "*"); 
    } 
    return next(); 
    }); 
    app.use(express.static(path.join(application_root, "StaticPages"))); 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

UWAGA: że potrzeba middleware być wcześniej trasy, aby efekt, innymi słowy nie można umieścić middleware po statycznym middleware.

+0

to działa, dziękuję. Potrzebowałem pierwszego przypadku. – csg

+1

Co powiesz na 'setHeaders - Funkcja do ustawiania nagłówków HTTP do wyświetlania w pliku. - Funkcja "w statycznej http://expressjs.com/en/4x/api.html#express.static – Green

+0

Możesz dodać program obsługi _ po statycznym oprogramowaniu pośredniczącym, które ustawia nagłówek bez podłańcucha podrzędnego, zamiast używać' app. użyj '... mniej narzut –

2

Innym sposobem:

app.use(express.static(
    path.join(application_root, "StaticPages"), 
    { 
     setHeaders: (res) => { 
      res.setHeader('Access-Control-Allow-Origin', '*') 
     } 
    } 
)) 
Powiązane problemy