Angular Fullstack + CORS:XMLHttpRequest无法加载
我一直在这个上拉我的头发。
我用yeoman生成器angular-fullstack在ExpressJS服务器上用Express创build一个小的angular度应用程序。 我正在使用远程服务,所以没有API服务器端调用写在我的应用程序。
厂:
var offerServiceURL = "https://www.example.com"; angular.module("services", ['ngResource']) .factory('offerService', function($resource) { return $resource(offerServiceURL+'/offers/service/:action/:param1', { action: '@action' }, { getOfferEligibility : { method: 'POST', params: {action:'get-offer-eligibility'} } }); });
控制器:
angular.module('myApp') .controller('myCtrl', function($scope, offerService){ offerService.getOfferEligibility($scope.user, function(data){ if(data.status == "SUCCESS"){ .... } }) })
铬给我一个一般的错误:
XMLHttpRequest无法加载https://example.com/offers/service/get-offer-eligibility 。 请求的资源上没有“Access-Control-Allow-Origin”标题。 Origin'http: //localhost.digitalink.com:9000 '因此是不允许访问的。
请求标题使其成为具有正确信息的选项:
请求方法:OPTIONS状态码:200 OK响应头视图源Access-Control-Allow-Credentials:true Access-Control-Allow-Headers:内容typesAccess-Control-Allow-Methods:GET,POST,OPTIONS访问控制 – 允许来源: http : //localhost.digitalink.com : 9000
但是它在POST中断并且没有正确的标题。
实际上,我的团队中的其他人员可以使用网页上运行的相同angular度的工厂,从本地计算机成功访问服务。 我比较了我的标题与成功的POST上的标题。 我缺less我的POST请求上的访问控制标题。
我能想到的唯一的差异是他们正在尝试从端口8080的Java应用程序。这是否有所作为? 任何见解都会有所帮助!
您可以使用expressjs应用程序使用expressjs的cors模块在您的应用程序中启用CORS。
安装
npm install cors
简单使用(启用所有CORS请求)
var express = require('express'); var cors = require('cors'); var app = express(); app.use(cors());
有关更多详细信息,请访问https://github.com/expressjs/cors
这个问题与客户端的CORS问题无关。 答案是服务不喜欢我的数据。 如果数据不好,则API返回错误的CORS头,而不是发送数据不好的响应。