使用 gulp-connect 插件在 gulp 中配置中间件
Configuring middleware in gulp using gulp-connect plugin
我项目的 back-end 部分在 http://localhost:8080
上运行,front-end 在 http://localhost:8811
上的 gulp-connect 服务器上 运行。而 运行 在 chrome 上,每当进行 REST api 调用时,chrome 都会生成此错误消息-
请求的资源上没有 'Access-Control-Allow-Origin' header
是否可以使用 gulp-connect 中间件选项中的 proxy
配置来消除此错误?如果是,那么我想知道如何。
我尝试将响应 header 'allow-origin' 从 back-end 设置为 'http://localhost:8811' 并且它有效但我想知道 gulp 是否可以帮助消除该错误。
以下是我的 gulpfile.js
的片段
gulp.task('webserver',function(){
gulpWebServer.server({
root : ['.'],
port : 8811,
host : 'gulp_dev',
livereload : true,
middleware: function(connect, opt) {
return [
proxy({ changeOrigin: true,target: 'http://localhost:8080'})
];
}
});
});
和service
如下:
angular.module('RestAssignment').service('EmployeeService',["$resource",function($resource){
return $resource('',{},{
fetchEmployeeById :{
url:'http://localhost:8080/rest/abc/getEmployeeById/2',
method:'GET'
},
fetchEmployeeList : {
url:'http://localhost:8080/rest/abc/getAllEmployees',
method:'GET',
isArray : true
}
},{});
}]);
问题是我在 EmployeeService
中的 $resource
中指定了完整的 URL (即使有协议和端口),我认为这使代理和第二部分的效果无效问题是我没有在 proxy(
path
,options)
函数中指定任何路径,因此所有请求都被代理了,但我想要只有 REST 调用被代理,因为我在进行 REST API 调用时收到 'No Access-Control-Allow-Origin header'。
所以我将 gulpfile.js 更改为以下内容:
gulp.task('webserver',function(){
gulpWebServer.server({
root : ['.'],
port : 8811,
host : 'gulp_dev',
livereload : true,
middleware: function(connect, opt) {
return [
return proxy('/rest/**', { target: 'http://localhost:8080', changeOrigin : true});
];
}
});
});
和EmoloyeeService
到:
angular.module('LNAssignment').service('EmployeeService',["$resource",function($resource){
return $resource('',{},{
fetchEmployeeById :{
url:'/rest/abc/getEmployeeById/2',
method:'GET'
},
fetchEmployeeList : {
url:'/rest/abc/getAllEmployees',
method:'GET',
isArray : true
}
},{});
}]);
现在中间件代理可以完美运行,没有任何 CORS 相关的错误消息。
已修复:请求的资源上不存在 'Access-Control-Allow-Origin'header
安装 cors 包:
npm install --save-dev cors
然后将其添加为连接的中间件:
var gulp = require('gulp');
var connect = require('gulp-connect');
var cors = require('cors');
gulp.task('connect', function() {
connect.server({
root: 'app',
middleware: function() {
return [cors()];
}
});
});
参考:here
我项目的 back-end 部分在 http://localhost:8080
上运行,front-end 在 http://localhost:8811
上的 gulp-connect 服务器上 运行。而 运行 在 chrome 上,每当进行 REST api 调用时,chrome 都会生成此错误消息-
请求的资源上没有 'Access-Control-Allow-Origin' header
是否可以使用 gulp-connect 中间件选项中的 proxy
配置来消除此错误?如果是,那么我想知道如何。
我尝试将响应 header 'allow-origin' 从 back-end 设置为 'http://localhost:8811' 并且它有效但我想知道 gulp 是否可以帮助消除该错误。
以下是我的 gulpfile.js
gulp.task('webserver',function(){
gulpWebServer.server({
root : ['.'],
port : 8811,
host : 'gulp_dev',
livereload : true,
middleware: function(connect, opt) {
return [
proxy({ changeOrigin: true,target: 'http://localhost:8080'})
];
}
});
});
和service
如下:
angular.module('RestAssignment').service('EmployeeService',["$resource",function($resource){
return $resource('',{},{
fetchEmployeeById :{
url:'http://localhost:8080/rest/abc/getEmployeeById/2',
method:'GET'
},
fetchEmployeeList : {
url:'http://localhost:8080/rest/abc/getAllEmployees',
method:'GET',
isArray : true
}
},{});
}]);
问题是我在 EmployeeService
中的 $resource
中指定了完整的 URL (即使有协议和端口),我认为这使代理和第二部分的效果无效问题是我没有在 proxy(
path
,options)
函数中指定任何路径,因此所有请求都被代理了,但我想要只有 REST 调用被代理,因为我在进行 REST API 调用时收到 'No Access-Control-Allow-Origin header'。
所以我将 gulpfile.js 更改为以下内容:
gulp.task('webserver',function(){
gulpWebServer.server({
root : ['.'],
port : 8811,
host : 'gulp_dev',
livereload : true,
middleware: function(connect, opt) {
return [
return proxy('/rest/**', { target: 'http://localhost:8080', changeOrigin : true});
];
}
});
});
和EmoloyeeService
到:
angular.module('LNAssignment').service('EmployeeService',["$resource",function($resource){
return $resource('',{},{
fetchEmployeeById :{
url:'/rest/abc/getEmployeeById/2',
method:'GET'
},
fetchEmployeeList : {
url:'/rest/abc/getAllEmployees',
method:'GET',
isArray : true
}
},{});
}]);
现在中间件代理可以完美运行,没有任何 CORS 相关的错误消息。
已修复:请求的资源上不存在 'Access-Control-Allow-Origin'header
安装 cors 包:
npm install --save-dev cors
然后将其添加为连接的中间件:
var gulp = require('gulp');
var connect = require('gulp-connect');
var cors = require('cors');
gulp.task('connect', function() {
connect.server({
root: 'app',
middleware: function() {
return [cors()];
}
});
});
参考:here