2016-04-11 21 views
2

実際にどのように起源を取得しますか? router.get('/', ...)の下で以下を使用すると、定義されていません。Expressで要求元を取得する

var origin = req.get('origin'); 

router.get時にサーバー(app.jsで下

+0

リクエストを送信中にリクエストヘッダに 'origin'を設定していますか?あなたはreq.hostnameを使用したいと思うかもしれません。 – Nivesh

+0

特定のドメインのみがアクセスするAPIを公開しますか? – Nivesh

+0

'req.host'は私のテストでExpressが動作しているドメインを返します。私は、エクスプレスをホストするドメインへの.ajax呼び出しを行うドメインがアクセスを許可されるようにCORSを許可しようとしており、また検索のハッシュキーです。 – sqldoug

答えて

0

var origin = req.get('Origin')作品(私はその後、APIに投稿する権利URLパラメータを構築するために、検索キーとして元のドメインを使用しようとしています)この場合)はそのルートの前にres.header("Access-Control-Allow-Origin", <a single allowed domain here (or '*' for any domain)>);が挿入されています。

2

リクエストのパスにこのexpressJsミドルウェアを追加します。最初のミドルウェア要求の出会いであることを確認してください。

/* 
    Creates origin property on request object 
*/ 
app.use(function(req, res, next){ 

    var protocol = req.protocol; 

    var hostHeaderIndex = req.rawHeaders.indexOf('Host') + 1; 
    var host = hostHeaderIndex?req.rawHeaders[hostHeaderIndex]:undefined; 

    Object.defineProperty(req, 'origin', { 

     get: function(){ 

      if(!host) 
       return req.headers.referer?req.headers.referer.substring(0, req.headers.referer.length-1):undefined; 
      else 
       return protocol + '://' + host; 
     } 
    }); 

    next(); 
}); 

//ここで、appはエクスプレスアプリまたはエクスプレスルータオブジェクトです。

関連する問題