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.js
function:
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
但不幸的是我仍然感到困惑。
这是我第一次尝试configurationAngular2
和Node.js
所以请裸露在我身边,任何build议/帮助,当然会高度赞赏。
您还必须添加代码来处理浏览器为CORS预检发送的OPTIONS请求:
app.options('/delete', function(req, res) { res.send(200); });
这个添加只会导致你的Node应用程序发送一个200
响应,而没有所有必要的Access-Control-*
响应头。