浏览器中的Grunt Connect CORS错误

浏览器中的Grunt Connect CORS错误,cors,grunt-contrib-connect,Cors,Grunt Contrib Connect,我正在尝试将一个小型angular应用程序连接到我在spring中编写的rest Web服务。我的tomcat服务器在localhost:8080上运行,我的grunt服务器在localhost:11000上运行。这会导致控制台中出现CORS错误,我无法从浏览器向rest API发出请求 我花了一上午的时间浏览了很多我可以在网上找到的帖子,但我仍然无法让它工作,我现在可以让我的页面服务给我,因为一些例子甚至阻止了它的工作。我确实在grunt服务器正在写入的cmd窗口中看到了控制台日志记录,但无论

我正在尝试将一个小型angular应用程序连接到我在spring中编写的rest Web服务。我的tomcat服务器在localhost:8080上运行,我的grunt服务器在localhost:11000上运行。这会导致控制台中出现CORS错误,我无法从浏览器向rest API发出请求

我花了一上午的时间浏览了很多我可以在网上找到的帖子,但我仍然无法让它工作,我现在可以让我的页面服务给我,因为一些例子甚至阻止了它的工作。我确实在grunt服务器正在写入的cmd窗口中看到了控制台日志记录,但无论我尝试了什么,我都会不断收到CORS错误:

  connect: {
            livereload: {
                options: {
                  port: 11000,
                  hostname: 'localhost',
                  open: false,                                     
                  middleware: function(connect, options, middlewares) {                       
                        middlewares.unshift(function(req, res, next) {
                            console.log('***** ADDING HEADERS *****');
                            res.setHeader('Access-Control-Allow-Origin', '*');
                            res.setHeader('Access-Control-Allow-Credentials', true);
                            res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
                            res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
                            next();
                        });

                        return middlewares;
                    }                                    
               }        
            } 
        } 

有人能告诉我如何解决这个问题吗?

好的,看来上面的grunt配置确实有效。我不得不在春天做一些修改,以使之生效

我以前从来没有这样做过,因为对后端API的请求通常是从java发送的,前端应用程序也是用java编写的,请求来自浏览器>>tomcat\spring\java,然后如果该应用程序需要对后端进行rest调用,则会从不会导致这些问题的java启动

无论如何,这里有一个修复的例子,任何人在试图直接从运行在不同容器中的angular应用程序调用spring中编写的rest API时,都可能会遇到这个问题

在配置类中配置以下内容:

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/calculator/*").allowedOrigins("http://localhost:11000");
        }
    };
}
这也只是为了开发,不想部署到ApacheWebServer,因为我可能已经使用http代理很容易地解决了这个问题,这样做意味着,当我运行selenium测试时,我将能够启动grunt服务器并将angular应用程序部署到该服务器,并且在我的自动构建过程中仍然运行所有集成测试