Изменить URL-адрес JsonClient x Путь

Когда я создаю 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 ответ

Решение

Если вы поместите оболочку вокруг материала 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 функции, но вы можете увидеть, как это будет работать для других.

Другие вопросы по тегам