Javascript 将代理中间件与gulp connect结合使用

Javascript 将代理中间件与gulp connect结合使用,javascript,gulp,Javascript,Gulp,我正在尝试使用gulp connect将所有请求转发到api/到localhost:3000。我在网站上找到了一个例子 并按如下方式设置我的连接任务: gulp.task('connect', function(){ connect.server({ root: './app', middleware: function(connect, o) { return [ (function() { var url = require('u

我正在尝试使用
gulp connect
将所有请求转发到
api/
localhost:3000
。我在网站上找到了一个例子

并按如下方式设置我的连接任务:

gulp.task('connect', function(){
    connect.server({
        root: './app', 
    middleware: function(connect, o) {
      return [ (function() {
        var url = require('url');
        var proxy = require('proxy-middleware');
        var options = url.parse('http://localhost:3000/api');
        options.route = 'api';
        return proxy(options);
      })()]
    }
    });
});
运行此任务会警告
connect不推荐使用的连接(中间件):使用app.use(中间件),而不是node_modules/gulp connect/index.js:39:19
,并且此任务不会按预期转发请求

我查看了
connect
源代码,看看是否可以解决折旧问题,但这超出了我在js中的水平:

 ConnectApp.prototype.server = function() {
    var app, middleware;
    middleware = this.middleware();
    app = connect.apply(null, middleware);
    server = http.createServer(app);
    app.use(connect.directory(typeof opt.root === "object" ? opt.root[0] : opt.root));
    server.listen(opt.port);
    this.log("Server started http://" + opt.host + ":" + opt.port);
    if (opt.livereload) {
      tiny_lr.Server.prototype.error = function() {};
      lr = tiny_lr();
      lr.listen(opt.livereload.port);
      return this.log("LiveReload started on port " + opt.livereload.port);
    }
  };

我不知道如何将我的gulp文件更改为使用
app。使用(中间件)
,connect模块不会导出
app
变量。

这是一个报告的问题,应在NPM的下一个gulp connect版本中修复:


即使使用github源代码,我也无法让中间件正常工作。我用
modrewrite

var modRewrite = require('connect-modrewrite');

gulp.task('connect', function() {
  connect.server({
    root: './app',
    port: 8000,
    middleware: function() {
      return [
        modRewrite([
          '^/api/(.*)$ http://localhost:3000/api/v1/$1 [P]'
        ])
      ];
    }
  });
});

这是我使用livereload(使用nodemon)启动express服务器并将所有API请求代理到服务器的配置

gulp.task('connect', function () {
    var connect = require('connect');

    // Start the Node server to provide the API
    var nodemon = require('gulp-nodemon');
    nodemon({ cwd: '../server', script: 'app.js', ignore: ['node_modules/*'], ext: 'js' })
        .on('restart', function () {
            console.log('Node server restarted!')
        });


    var app = connect()
        // proxy API requests to the node server
        .use(require('connect-modrewrite')(['^/api/(.*)$ http://localhost:3000/api/$1 [P]']))
        .use(require('connect-livereload')({ port: 35729 }))
        .use(connect.static('../client'))
        .use(connect.static('../client/.tmp'))
        .use(connect.directory('../client'));

    require('http').createServer(app)
        .listen(9000)
        .on('listening', function () {
            console.log('Started connect web server on http://localhost:9000');
        });
});
on给出的解决方案是使用包来实现这一点

例如:

var gulp = require('gulp');
var connect = require('gulp-connect');
var proxy = require('http-proxy-middleware');

gulp.task('connect', function() {
    connect.server({
        root: ['./app'],
        middleware: function(connect, opt) {
            return [
                proxy('/api', {
                    target: 'http://localhost:3000',
                    changeOrigin:true
                })
            ]
        }

    });
});

gulp.task('default', ['connect']);

可以同时使用github的构建吗?还是不推荐使用?在package.json依赖关系映射中,可以直接指向github repo。