解决JsonClient URL x Path

时间:2016-08-25 20:45:47

标签: node.js restify

当我在节点中创建JsonClient时,我会执行以下操作:

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插入配置文件中,这样我就可以毫不费力地更改主机;现在我需要一个基本路径,我需要更改代码以及配置。

1 个答案:

答案 0 :(得分: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函数,但你可以看到它对其他函数的作用。