Gulp browser-sync - перенаправить запрос API через прокси-сервер
Я пытаюсь перенаправить мои запросы API, подобные этому, с помощью gulp и sync-sync:
gulp.task('browser-sync', function () {
var files = [
'../index.html',
'../views/**/*.html',
'../assets/css/**/*.css',
'../assets/js/**/*.js'
];
var url = require('url'),
proxy = require('proxy-middleware');
var proxyOptions = url.parse('http://localhost:8000/api');
proxyOptions.route = '/api';
browserSync.init(files, {
server: {
baseDir: '..',
middleware: [proxy(proxyOptions)]
}
});
});
Но я получаю этот ответ, когда вызов отправляется в API:
Error: connect ECONNREFUSED
at errnoException (net.js:904:11)
at Object.afterConnect [as oncomplete] (net.js:895:19)
Любая идея о том, что я делаю неправильно?
Ответы
Ответ 1
Оформить официальную документацию об использовании BrowserSync с Gulp. Мне удалось запустить BrowserSync с прокси-сервером в /api
без проблем.
Убедитесь, что ничего не использует порт 8000
. Вы можете изменить используемый порт BrowserSync через опцию port
при инициализации BrowserSync.
Вот gulpfile.js
Я закончил с:
npm install gulp url proxy-middleware browser-sync --save-dev
// Include gulp
var gulp = require('gulp');
var url = require('url');
var proxy = require('proxy-middleware');
var browserSync = require('browser-sync');
var paths = {
css: ['./**/*.css', '!./node_modules/**/*']
};
// browser-sync task for starting the server.
gulp.task('browser-sync', function() {
var proxyOptions = url.parse('http://localhost:3000/secret-api');
proxyOptions.route = '/api';
// requests to '/api/x/y/z' are proxied to 'http://localhost:3000/secret-api'
browserSync({
open: true,
port: 3000,
server: {
baseDir: "./",
middleware: [proxy(proxyOptions)]
}
});
});
// Stream the style changes to the page
gulp.task('reload-css', function() {
gulp.src(paths.css)
.pipe(browserSync.reload({stream: true}));
});
// Watch Files For Changes
gulp.task('watch', function() {
gulp.watch(paths.css, ['reload-css']);
});
// Default Task
gulp.task('default', ['browser-sync', 'watch']);
Если вы не хотите выполнять отдельную задачу gulp для перезагрузки/потока изменений, вы можете использовать опцию files
:
browserSync({
open: true,
port: 3000,
server: {
baseDir: "./",
middleware: [proxy(proxyOptions)]
},
files: paths.css
});
Ответ 2
Я столкнулся с той же проблемой, что и с настройкой gulp + browser-sync + proxy-middleware, при этом переход от grunt до gulp.
Error: connect ECONNREFUSED
at errnoException (net.js:904:11)
at Object.afterConnect [as oncomplete] (net.js:895:19)
В моем случае что-то внутри корпоративной сети, которое не позволяло прокси-промежуточному программному обеспечению работать. Как только я был в общественной сети, проблема исчезла.
С помощью grunt-connect + grunt-connect-proxy я мог без проблем прокси файлы в корпоративной сети.
proxy-middleware реализует свои собственные функции прокси, в то время как grunt-connect-proxy использует http-proxy для выполнения фактической работы прокси.
В конце концов я написал небольшую промежуточную оболочку вокруг http-proxy, которая будет использоваться в браузере-синхронизации и подключении, что позволило решить проблемы с прокси-серверами в корпоративной сети.
https://www.npmjs.com/package/http-proxy-middleware
var browserSync = require('browser-sync');
var proxyMiddleware = require('http-proxy-middleware');
var proxy = proxyMiddleware('/ajax', {target: 'http://cdnjs.cloudflare.com'});
browserSync({
server: {
baseDir: "./",
port: 3000,
middleware: [proxy]
}
});