gpt4 book ai didi

jquery - Angular $http.delete CORS 错误(预检请求)

转载 作者:搜寻专家 更新时间:2023-10-31 23:35:20 29 4
gpt4 key购买 nike

我有一个 Angular 应用程序 (v1.13.15) 和 Express.js(v4.12.4) 作为后端。

我的后端有一个 DELETE 方法,我已经为它启用了 CORS 支持。

但是,当我使用 Angular $http.delete 时,我遇到了这个错误

请求的资源上不存在“Access-Control-Allow-Origin” header 。

我试过使用 Jquery,$.ajax() 调用它,但我遇到了同样的问题!

我也试过使用 POSTMAN 做一个 DELETE 请求,没有问题。

但是,使用我的 Angular 访问我的 GET 和 POST 方法没有问题..

请问这是什么问题?

我的后端网址 http://localhost:3000

我使用 gulp-webserver 服务我的 AngularJS http://localhost:8000

我的服务器代码

exports.deleteGPSData = (req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.header('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

let id = req.params.id;

res.send('here');
}

和我的 Angular 代码

$http.delete(API_URL + '/gps/' + id)
.success(function(res) {
if (res.result !== 1) {
return defer.reject(new Error(id + ' failed to delete'));
}

defer.resolve(res.id);
})
.error(function(status) {
defer.reject(status);
});

我对 GET 和 POST 方法没有问题!只有当我使用 DELETE 方法时,我才遇到 CORS 错误!

我在下面附上了使用 Google Chrome 的请求 header 的屏幕截图

Angular CORs problme

下面是 Postman 的截图,

POSTMAN delete

最佳答案

我设法解决了这个问题,这是由于预检请求

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

在做CORS for DELETE时,会先向服务器发送一个OPTIONS方法,然后解析为DELETE方法

所以在后端,我应该有 OPTIONS 的路由,然后调用 next() 将它传递给 DELETE 方法

后端代码:

app.options('/gps/:id', routes.gps.optionGPSData);
app.delete('/gps/:id', routes.gps.deleteGPSData);

和我的路由器中间件

exports.optionGPSData = (req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'DELETE');
res.header('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type');

next();
}

POSTMAN 能够执行 DELETE 请求吗? (这是因为它向我的服务器发送一个 DELETE http 请求,而不是 OPTIONS)而在网络浏览器中,它会发送一个 OPTIONS 用于预检请求(这主要是出于安全考虑)

*向@FrankerZ 大喊大叫,他启发我比较 POSTMAN 和我的 Chrome 结果,然后我发现访问控制允许方法存在差异,这导致我尝试使用 cors 中间件(https://www.npmjs.com/package/cors),并且它有效然后我设法解决了问题,这是由于预检请求造成的!

关于jquery - Angular $http.delete CORS 错误(预检请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30497413/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com