2016-09-20 2 views
0

Я пытаюсь настроить BrowserSync для работы в режиме сервера и проксировать мои запросы API на сервер, который работает на одной машине на другом порту, используя http-proxy-middleware. Я использую Gulp для запуска BrowserSync.http-proxy-middleware не пересылает полный путь

BrowserSync работает на порту 8081. работает мой бэкенд на 8080.

Вот как я создаю прокси промежуточное программное обеспечение:

var proxyApi = proxy('/api', {target : 'http://localhost:8080/api', logLevel : 'debug'}); 

А вот как я бегу BrowserSync из моей Глоток задачи:

// Init BrowserSync with proxies as middleware and based on the dest dir 
browserSync.init({ 
    open: true, 
    port: config.proxyPort, 
    server: { 
     baseDir: config.destDir, 
     middleware: [proxyApi] 
    }, 
    browser: "google chrome" 
}); 

выход:

[HPM] Proxy created: /api -> http://localhost:8080/api 

Все выглядит хорошо.

Но когда я попал, например. http://localhost:8081/api/users, выход:

[HPM] GET /api/users/123 -> http://localhost:8080/api 

... И мой клиент получает 404 ошибку, потому что /api самих по себе ничего на внутреннем интерфейсе не совпадает.

Из того, что я понял из док и примеров, цель должна быть на самом деле http://localhost:8080/api/users/123

Почему остальная часть пути (в данном случае /users/123) быть исключенным?

Используя следующие версии:

"gulp": "3.9.1", 
"browser-sync": "2.16.0", 
"http-proxy-middleware": "0.17.1", 

ответ

1

Опция prependPath является true по умолчанию. Эта опция предоставляется базой lib: http-proxy.

prependPath: истина/ложь, по умолчанию: правда - указать, хотите ли вы предварять путь цели на пути прокси

Есть два способа решить проблему:

1.) Изменить target от 'http://localhost:8080/api' к 'http://localhost:8080'

var proxyApi = proxy('/api', {target: 'http://localhost:8080', logLevel: 'debug'}); 

2.) В качестве альтернативы вы можете установить опцию prependPath на номер false.

var proxyApi = proxy('/api', {target: 'http://localhost:8080/api', prependPath: false, logLevel: 'debug'}); 
+0

Спасибо за указатель и решения. Второй работает хорошо для меня, так как я хочу проксировать определенные маршруты, а не весь сервер. Я должен сказать, что имя параметра «prependPath» не очень интуитивно для того, что он делает. –

+0

Нет разницы между вариантами 1 и 2, кроме разницы в конфигурации. Первый аргумент '/ api'' проверяет только прокси-запрос. Не можете вспомнить, почему вы сохранили цель + путь: 'http: // localhost: 8080/api' и дополнительный параметр« prependPath », если он интуитивно понятен. :) – chimurai

Смежные вопросы