2016-04-19 81 views
2

我的應用程序存在CORS問題。AngularJS&Node.js CORS不適用於PUT/POST

我的堆棧使用Express 4的Node.js和AngularJS

我已經嘗試了一些東西,但我不斷收到所有的POST/PUT請求:

No 'Access-Control-Allow-Origin' header is present on the requested resource. 

在服務器端我有使用NPM cors模塊

var cors = require('cors'); 
var corsOptions = { 
    origin: [ 
    'http://www.localhost:5555', 
    'http://www.somedomain.com' 
    ], 
    methods: ['GET', 'HEAD', 'PUT', 'PATCH', 'POST', 'DELETE', 'OPTIONS'], 
    allowedHeaders: [ 
    'Content-Type', 
    'Content-Length', 
    'Content-Range', 
    'Content-Disposition', 
    'Content-Description', 
    'Access-Control-Allow-Origin', 
    'Access-Control-Allow-Headers', 
    'Authorization', 
    'Origin', 
    'X-Requested-With', 
    'X-AUTH-TOKEN' 
    ], 
    credentials: true 
}; 
app.use(cors(corsOptions)); 

在AngularJS部分啓用CORS我使用這個:

// App Config 
App.config(['$httpProvider', 
    function ($httpProvider) { 
    $httpProvider.defaults.withCredentials = true; 
    } 
]); 

// Request in the Angular service 
var deferred = $q.defer(); 
var host = 'http://www.localhost:5555'; 
var id = 'some-id'; 
var data = {}; 

$http.put(host + '/roles/' + id, data). 
    success(function (data) { 
    deferred.resolve(data); 
    }). 
    error(function (err) { 
    deferred.reject(err); 
    }); 

return deferred.promise; 

GET請求正常工作。 PUT/POST請求不斷返回上面的相同錯誤。預檢選項是成功的。

感謝

+0

你在本地主機上運行的應用程序的角度對我的作品與CORS?如果你是,你應該添加「http:// localhost」到您的原始選項到corsOption對象。 –

+0

您可能需要創建一個代理http://shawnsimondeveloper.com/nodeproxyangular/ –

+0

請檢查此堆棧溢出http://stackoverflow.com/questions/36002979/xmlhttprequest-cannot-load-and-response-for-preflight- has-invalid-http-status-co/36003110#36003110 –

回答

-1

這一個Express 4的服務器

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Methods", "OPTIONS, POST, GET, PUT, DELETE"); 
    res.header("Access-Control-Allow-Headers", YOUR HEADERS HERE); 
    res.header('Access-Control-Allow-Credentials', true); 
    if ('OPTIONS' == req.method) { 
     return res.sendStatus(200); 
    } else { 
     next(); 
    } 
}); 
+0

爲什麼要解決這個問題?現有代碼有什麼問題? – Quentin

+0

現有的代碼不起作用,這是問題所在。 –

+0

**爲什麼**不存在現有的代碼工作? – Quentin