web-dev-qa-db-fra.com

Utiliser un middleware proxy avec gulp connect

J'essaie d'utiliser gulp-connect Pour transmettre toutes les demandes à api/ À localhost:3000. J'ai trouvé un exemple sur https://github.com/AveVlad/gulp-connect/issues/27

et configurer ma tâche de connexion comme ceci:

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);
      })()]
    }
    });
});

L'exécution de cette tâche avertit que connect deprecated connect(middleware): use app.use(middleware) instead node_modules/gulp-connect/index.js:39:19 et cette tâche ne transfère pas les demandes comme prévu.

J'ai regardé la source connect pour voir si je pouvais contourner la dépréciation, mais elle dépasse mon niveau en 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);
    }
  };

Je ne peux pas comprendre comment changer mon fichier gulp pour utiliser app.use(middleware), la variable app n'est pas exportée par le module de connexion.

18
user2936314

Il s'agit d'un problème signalé qui devrait être résolu dans la prochaine version de gulp-connect sur NPM:

https://github.com/AveVlad/gulp-connect/commit/9bd7da765d6763bbee566cc5fc03b873ccf93e37https://github.com/AveVlad/gulp-connect/issues/67

3
Delapouite

Une solution donnée par chimurai on Github consiste à utiliser le package http-proxy-middleware pour ce faire.

Par exemple :

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']);
25
Blackus

Je n'ai pas pu faire fonctionner correctement le middleware même lorsque j'utilise la source github. J'ai obtenu le même résultat avec 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]'
        ])
      ];
    }
  });
});
8
user2936314

C'est ma configuration pour démarrer un serveur express avec livereload (en utilisant nodemon) et proxy toutes les requêtes API au serveur.

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');
        });
});
3
Varun N