2014-07-03 23 views
15

Sto tentando di utilizzare gulp-connect per inoltrare tutte le richieste a api/ a localhost:3000. Ho trovato un esempio a https://github.com/AveVlad/gulp-connect/issues/27Utilizzare il middleware proxy con gulp connect

e impostare il mio compito collegare in questo modo:

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'esecuzione di questo compito avverte che connect deprecated connect(middleware): use app.use(middleware) instead node_modules/gulp-connect/index.js:39:19 e questo compito non lo fa in avanti le richieste come previsto.

ho guardato la fonte connect per vedere se riuscivo a risolvere il deprezzamento, ma è oltre il mio livello in 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); 
    } 
    }; 

io non riesco a capire come cambiare il mio sorso-file da utilizzare app.use(middleware) , la variabile app non viene esportata dal modulo di connessione.

risposta

3

Questo è un problema riferito che dovrebbe essere risolto nella prossima versione gulp-connect on NPM:

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

+0

E 'possibile utilizzare la build da github nel frattempo o è che non è raccomandato? – user2936314

+0

Nella mappa delle dipendenze di package.json, è possibile puntare direttamente a un repo di github. – Delapouite

7

non ho potuto ottenere il middleware per funzionare correttamente anche quando si utilizza la sorgente di GitHub. Ho fatto ottenere lo stesso risultato con 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]' 
     ]) 
     ]; 
    } 
    }); 
}); 
3

Questo è il mio config per avviare un Server Express con livereload (utilizzando nodemon) e delega tutte le richieste API al server.

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'); 
     }); 
}); 
23

Una soluzione proposta dal chimurai su Github è quello di utilizzare il pacchetto http-proxy-middleware di farlo.

Ad esempio:

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']); 
Problemi correlati