Angular2应用程序调用node.js函数

好,所以我有一个Angular2应用程序运行在http://localhost:4200/ ,在这个应用程序内我试图调用位于一个单独的node.js应用程序当前运行在http://localhost:3000/

我从Angular2应用程序调用:

 deletePhoto(photoId: string) { var options = new RequestOptions({ headers: new Headers({ 'Accept': 'application/json', 'Access-Control-Allow-Origin': 'http://localhost:4200' }) }); let url = `http://localhost:3000/delete?photoId=${photoId}`; this.http.post(url, options).subscribe(response => { let user = response.json() console.log(user); }, err => { console.log('Unable to call delete photo', err); }); } 

这是我的node.jsfunction:

 var express = require('express') var app = express(); app.post('/delete', function (req, res) { req.setHeader('Access-Control-Allow-Origin', 'http://localhost:4200'); res.setHeader('Access-Control-Request-Method', '*'); res.setHeader('Access-Control-Allow-Methods', 'POST'); res.setHeader('Access-Control-Allow-Headers', '*'); var photoId = req.query['photoId']; //var userId = req.query['userId']; res.json({ "photoId": photoId, "test": "Testing node server" }) }) 

但是,我在浏览器中收到的错误是:

对预检请求的响应不会通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 原因' http:// localhost:4200 '因此不被允许访问。

现在谷歌search这个错误后,我读了我需要设置在请求的资源头,所以我添加了req.setHeader在我的node方法,但仍然无济于事,我也在我的Angular2应用程序中设置它,看看是否它是什么意思是可悲的是同样的结果。

我已经阅读了cors但不幸的是我仍然感到困惑。

这是我第一次尝试configurationAngular2Node.js所以请裸露在我身边,任何build议/帮助,当然会高度赞赏。

您还必须添加代码来处理浏览器为CORS预检发送的OPTIONS请求:

 app.options('/delete', function(req, res) { res.send(200); }); 

这个添加只会导致你的Node应用程序发送一个200响应,而没有所有必要的Access-Control-*响应头。