2013-01-05 22 views
33

Express.JSで提供されるいくつかの静的ページがあります。セットアップは簡単です:Express.JSでhttpヘッダーを追加送信

var app = express(); 

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

私は応答がaddittional HTTPヘッダ(アクセス制御 - 許可 - 原産地:*)を含むようにしたいです。どこに置くべきですか? は、私は以下のサンプルを試してみましたが、もちろん、ヘッダは、デフォルトのページに表示されます:

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

感謝。

+1

。 http://expressjs.com/en/api.html#res.set – AndyPerlitch

答えて

48

私は、以下のサンプルを試してみましたが、もちろん、ヘッダは、デフォルトのページ

を表示され、あなただけのGET /ルートのではなく、他のパスのためにそれを定義したので、はい、それはあります。代わりにミドルウェアを使用する必要があります。

あなたはすべてのリクエストのヘッダーを設定したい場合:

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 })); 
}); 

あなただけの静的フォルダのためにそれをしたい場合は、一般的な方法はありません。おそらくexpress.static(これはconnect.staticから来ます)を変更することができます。これを行うもう1つの方法は、urlと一致させ、urlが一致する場合はヘッダーを設定することです。

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 })); 
}); 

注:ミドルウェアは、他の言葉であなたは、静的なミドルウェア後にミドルウェアを置くことができない、効果を作るためにルートを前にする必要があること。

+0

動作します、ありがとうございます。私は最初のケースが必要でした。 – csg

+1

'setHeaders - ファイルとともに提供されるHTTPヘッダを設定する関数についてはどうですか? - 静的関数http://expressjs.com/en/4x/api.html#express.static – Green

+0

'appを使う代わりに、url部分文字列のマッチなしにヘッダーを設定する静的ミドルウェアを_after_後で追加することができます。使用する '...オーバーヘッドが少ない –

2

別の方法:ルート上にカスタムヘッダーを設定すると `res.setHeader`が定義されていない、` res.set`または `res.header`を使用する方法をお探しの方に

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