我尝试使用gulp和browser-sync重定向我的API请求:
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)
对我做错了什么的想法?
答案 0 :(得分:48)
结帐official documentation about using BrowserSync with Gulp。我能够在/api
上使用代理启动并运行BrowserSync,没有任何问题。
检查以确保没有其他人使用端口8000
。您可以通过port
option when initializing BrowserSync更改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/x/y/z`
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
option:
browserSync({
open: true,
port: 3000,
server: {
baseDir: "./",
middleware: [proxy(proxyOptions)]
},
files: paths.css
});
答案 1 :(得分:0)
我遇到了一个问题,我找不到解决方案。我需要两个选项:
browser-sync
在 SPA mode 中运行/api
路由有 middleware 个代理SPA 模式似乎拦截了 /api
并呈现 index.html
,而不是代理到后端。
解决方案是在 browser-sync
sources 中:使用该 middleware
路线实现单一模式,该路线比手动添加的路线具有更高的优先级:
if (bs.options.get("single")) {
defaultMiddlewares.unshift({
id: "Browsersync SPA support",
route: "",
handle: require("connect-history-api-fallback")()
});
}
根据需要进行以下配置 - SPA
路由位于中间件列表的末尾:
const proxy = require('proxy-middleware');
...
server.init({
...
middleware: [ {
route: "/api",
handle: proxy(url.parse("http://api.host:4444/api"))
}, {
id: "SPA support",
route: "",
handle: require("connect-history-api-fallback")()
} ],
single: false,
...
})