36

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

応答に追加の http ヘッダー ( Access-Control-Allow-Origin:* ) を含めたい。どこに置くべきですか?以下のサンプルを試してみましたが、もちろんヘッダーはデフォルトのページにしか表示されません:

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

ありがとう。

4

2 に答える 2

54

以下のサンプルを試してみましたが、もちろんヘッダーはデフォルトのページにしか表示されません

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に由来する) を変更できます。これを行う別の方法は、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 }));
});

注: ミドルウェアを有効にするには、ルートの前に配置する必要があります。つまり、静的ミドルウェアの後にミドルウェアを配置することはできません。

于 2013-01-05T13:55:45.163 に答える