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

时间:2017-02-19 02:56:25

标签: node.js angular cors preflight

好的,我在Angular2上运行了http://localhost:4200/个应用程序,在这个应用程序中,我试图调用当前在{{{}运行的单独node.js应用程序中的函数1}}

来自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

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

  

对预检请求的响应没有通过访问控制检查:否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' http://localhost:4200'因此不允许访问。

现在搜索了这个错误后,我看到我需要在请求的资源上设置标题,所以我在我的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" }) }) 方法上添加了req.setHeader,但仍无效,我也将其设置为我的node应用程序,看看它是什么意思,但遗憾的是同样的结果。

我已经阅读了Angular2,但遗憾的是我仍然对此感到困惑。

1 个答案:

答案 0 :(得分:0)

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

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

此添加只会导致您的Node应用发送200响应,而且没有正文,并且包含所有必需的Access-Control-*响应标头。