2016-08-25 7 views
0

私は、私は次の操作を実行したノードでJsonClient作成:Restify JsonClient URLのXパス

var client = restify.createJsonClient({ 
    url: 'https://www.domain.com:4321/api' 
}); 

私はそうのような呼び出しを行う、ことをやったら:

client.post('/service/path', { }); 

右のようであるが。呼び出されるパスはhttps://www.domain.com:4321/api/service/pathのようなものになると思います。しかし、クライアントが/apiの基本パスを投げ捨てて、https://www.domain.com:4321/service/pathを呼び出していることが起こります。

私はそれを得ることができません - クライアントURLを設定ファイルに挿入するので、面倒なくホストを変更できます。基本パスが必要になったので、コードと設定を変更する必要があります。

+0

ハ!私はちょうどあなたが質問したことさえ知りませんでした。決して尋ねられなかったことに答える私の愚行。 – HeadCode

+0

@headcode本当はこのコミュニティをもう得られません。あなたは答えました、そして、私はそれを受け入れることを忘れました。私もいくつかのデューデリジェンスを行い、gitを修正する際に問題をオープンしました。開発者は、実際にはその動作が誤解を招くと答えました。 –

答えて

0

JsonClientを復元するためのラッパーを置くと、コードの変更を最小限に抑えることができ、設定はあなたが望むように動作すると思います。

次に、このようにそれを使用するライブラリファイルmyClient.jsに

'use strict'; 
var restify = require('restify'); 
var jsonClient = null; 

module.exports = { 
    createJsonClient: function(opts){ 
     var opts = opts || {}; 
     var url = opts.url; 
     var parts = url.split('/'); 
     var main_url = parts[0] + '//' + parts[2]; 
     var basePath = parts[3] ? parts[3] : ''; 
     jsonClient = restify.createJsonClient({url: main_url}); 

     return { 
      get: function(path, cb){ 
       var adjusted_path = '/' + basePath + path; 
       jsonClient.get(adjusted_path, function(err2, req2, res2, obj2){ 
        return cb(err2, req2, res2, obj2); 
       }); 
      } 
     } 
    } 
} 

を作成します。

var myClientWrapper = require('./lib/myClient'); 
var client = myClientWrapper.createJsonClient({url: 'http://localhost:8000/api'}); 

client.get('/service/path/one', function(err, req, res, obj){ 
    if(err){ 
     console.log(err.message); 
     return; 
    } 
    console.log(res.body); 
}); 

さらにエラーチェックを使用する可能性があり、URL解析は少し脆弱ですが、機能します。私はそれを試しました。もちろん、私はget関数をラップするだけでしたが、他の関数でどのように動作するかを見ることができます。

+0

これはクライアントを再構築するたびに発生するので、すべてのメソッドに対して汎用のラッパーおよびヘルパー構築関数を作成しました。 –