Ответ 1
Это сообщение об ошибке, которое должно быть исправлено в следующей версии gulp -connect на NPM:
https://github.com/AveVlad/gulp-connect/commit/9bd7da765d6763bbee566cc5fc03b873ccf93e37 https://github.com/AveVlad/gulp-connect/issues/67
Я пытаюсь использовать gulp-connect
для пересылки всех запросов на api/
на localhost:3000
. Я нашел пример в https://github.com/AveVlad/gulp-connect/issues/27
и настройте мою задачу подключения следующим образом:
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 deprecated connect(middleware): use app.use(middleware) instead 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.use(middleware)
, переменная app
не экспортируется модулем подключения.
Это сообщение об ошибке, которое должно быть исправлено в следующей версии gulp -connect на NPM:
https://github.com/AveVlad/gulp-connect/commit/9bd7da765d6763bbee566cc5fc03b873ccf93e37 https://github.com/AveVlad/gulp-connect/issues/67
Решение chimurai в Github состоит в использовании http-proxy-middleware, чтобы сделать это.
Например:
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. Я получил тот же результат с 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]'
])
];
}
});
});
Это моя конфигурация, чтобы запустить экспресс-сервер с помощью функции reneload (используя nodemon) и прокси-сервер всех запросов 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');
});
});