来自角度默认的POST请求,因为OPTIONS返回飞行前错误

时间:2017-09-17 21:56:23

标签: javascript node.js angular cors preflight

在我的angularJS服务中,我正在调用http模块向NodeJS编写的API发出POST请求。 POST请求自动更改为OPTIONS,并在浏览器中出现交叉原因错误,但我已在节点中包含标题以允许所有来源。

点击按钮时POST请求正确触发,代码如下:

addNewBooking(newBooking){
    var headers = new Headers();
    return this.http.post('http://localhost:3000/bookings', newBooking, 
    {headers: headers})
    .map(res => res.json());
}

在节点控制台中,我看到请求是生成的 选项 > OPTIONS /bookings 200 6.792 ms - 24

我正在使用 -

侦听节点服务器中的请求
router.post('/', function(req, res, next) {
  console.log("api called");
  res.send(200);
});

在我的主app.js中,我设置快速属性,以允许交叉原点:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));

/// catch 404 and forward to error handler
app.use(function(req, res) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

我认为通过包含错误将解决的跨源头文件。

发出请求时,浏览器中出现的错误如下所示:

  XMLHttpRequest cannot load http://localhost:3000/bookings. Response to preflight request doesn't pass access control check: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:4200' is therefore not allowed access.

我不确定为什么请求默认为OPTIONS。我在其他AngularJS应用程序中遵循了相同的约定,并没有看到这种问题。我能够使用router.options('/')捕获请求但是我仍然在浏览器中收到错误,并且不是我正在寻找的请求类型。

0 个答案:

没有答案