1

現在、Ember アプリケーションから情報を取得している Neo4J データベースに GrapheneDB を使用しています。Neo4J には基本 HTTP 認証が必要であり、(ajax 呼び出しでヘッダーを明示的に記述するのではなく) より安全な方法が必要なため、http プロキシを使用してデータベースに接続しようとしています。そのため、Ember-CLI を使用して、パスが「/api」の http プロキシを生成しました。プロキシファイル内には、次のものがあります。

〜/サーバー/プロキシ/api.js

var proxyPath = '/api';

module.exports = function(app) {
  // For options, see:
  // https://github.com/nodejitsu/node-http-proxy
  var proxy = require('http-proxy').createProxyServer({});
  var path = require('path');


  app.use(proxyPath, function(req, res, next){
    var credentials = new Buffer('app-id:app-pw').toString('base64');
    // include root path in proxied request
    req.url = path.join(proxyPath, req.url);
    req.headers.authorization = "Basic " + credentials;

    proxy.web(req, res, { target: 'http://app-id.sb02.stations.graphenedb.com:24789/db/data/' });
  });
};

したがって、上記を実行すると、サーバーに出力されたときのヘッダーは正しいように見えます。

{ host: 'localhost:4200',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36',
  'accept-encoding': 'gzip,deflate,sdch',
  'accept-language': 'en-US,en;q=0.8',
  authorization: 'Basic <correct base64 hash>' }

しかし、my api URL にアクセスすると、次の要求ヘッダーが表示されます。

GET /api HTTP/1.1
Host: localhost:4200
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

そして、404 Not Found が表示されます。しかし、認証ヘッダーを削除すると、401 Unauthorized というメッセージが表示され、ユーザー名/パスワードの入力を求められます。ヘッダーに「Authorization: Basic Og==". いずれにせよ、うまくいきません。

誰もこれに対する解決策を知っていますか? node-http-proxy のドキュメントにある setHeader コードの例を試してみました。また、インターウェブ全体で ember http-proxy に関する情報を検索しましたが、役に立ちませんでした。ありがとうございます!

4

2 に答える 2

2

これをテストできないため、ここで唾を吐きますが、機能していると思います。おそらく存在しない' http://app-id.sb02.stations.graphenedb.com:24789/db/data/api ' をリクエストしているため、404 が返されます。また、accept ヘッダーが原因である可能性もあります。ブラウザで試している場合、accept ヘッダーは text/html ですが、ターゲットは application/json を予期している可能性があり、その場合は 404 になります。これをテストするために、「curl -H "ContentType:application/json" [target]」をカールしてみることができます。

于 2014-09-26T02:18:24.387 に答える
0

GOULETGOULET が述べたように、「/api」がターゲット URL の末尾に追加されましたが、そのようなディレクトリはターゲットに存在しません。したがって、「db/data」にスワップするとうまくいきました。

于 2014-09-26T17:56:05.357 に答える