REST API、删除请求、CORS 规范或查询错误?

Posted

技术标签:

【中文标题】REST API、删除请求、CORS 规范或查询错误?【英文标题】:REST API, delete request, error with CORS specification or query? 【发布时间】:2020-12-23 20:13:42 【问题描述】:

基本上,我在 Node.js 服务器和 Angular 2 前端的 REST api 应用程序中的 DELETE 操作出现错误

浏览器中的错误信息:

CORS 策略已阻止从源“http://localhost:4200”访问“http://localhost:800/api/admin/deleteArticle?id=5f5244b8376ddd1d0c70ef52”处的 XMLHttpRequest:对预检请求的响应不” t 通过访问控制检查:它没有 HTTP ok 状态。

删除 http://localhost:800/api/admin/deleteArticle?id=5f5244b8376ddd1d0c70ef52 net::ERR_FAILED

ERROR HttpErrorResponse headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: "http://localhost:800/api/admin/deleteArticle", ok: false, ...

前端-发送(Angular):

public deleteArticle(articleId: string) 
    const httpParams = new HttpParams().set('id', articleId);
    const options =  params: httpParams ;
    return new Promise((res, rej) => 
      this.http.delete('http://localhost:800/api/admin/deleteArticle', options)
        .subscribe((serverResponse: any) => 
          console.log(serverResponse);
        );
    );
  

后端服务器(Node.js):

app.js

const express = require('express');
const path = require('path');
const bodyParser = require("body-parser");

const app = express();

const adminRoutes = require('./routes/adminRoutes');

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

app.use((req, res, next) => 
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader(
    "Access-Control-Allow-Headers", "application/x-www-form-urlencoded",
    "Origin, X-Requested-Width, Content-Type, Accept, Authorization"
  );
  res.setHeader(
    "Access-Control-Allow-Methods",
    "GET, POST, PATCH, PUT, DELETE, OPTIONS"
  )
  next();
);

app.use('/api/admin', adminRoutes);

adminRoutes.js


const router = express.Router();

router.delete('/deleteArticle:id', checkAuth, adminController.deleteArticle);

// everything is OKEY with checkAuth middleware

adminController.js

exports.deleteArticle = (req, res, next) => 
    const articleData = req.query;
    console.log(articleData)
 

看起来像 CORS 错误,但我在设置 DELETE 操作 (app.js) 中注册,所以一定没有错误:(

你能帮我解决这个问题吗?

提前谢谢你!!

【问题讨论】:

愚蠢的问题:你真的在使用800端口吗?似乎,通常使用 8000。可能是问题(?)。 R.理查兹,感谢您的参与,端口号一切正常,Frost 有解决方案并且它正在工作(cors 库),我认为一定有一些小的配置错误,因为它在上周五之前运行良好(我仍然会尝试找到它) 【参考方案1】:
const express = require('express');
const path = require('path');
const bodyParser = require("body-parser");

const app = express();

var cors = require('cors');
app.use(cors()); // Use this after the variable declaration

const adminRoutes = require('./routes/adminRoutes');

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

app.use((req, res, next) => 
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader(
    "Access-Control-Allow-Headers", "application/x-www-form-urlencoded",
    "Origin, X-Requested-Width, Content-Type, Accept, Authorization"
  );
  res.setHeader(
    "Access-Control-Allow-Methods",
    "GET, POST, PATCH, PUT, DELETE, OPTIONS"
  )
  next();
);

app.use('/api/admin', adminRoutes);

【讨论】:

使用这两行var cors = require('cors');app.use(cors());

以上是关于REST API、删除请求、CORS 规范或查询错误?的主要内容,如果未能解决你的问题,请参考以下文章

节点 express REST API 中的 CORS 错误(PATCH 请求)

从 Angular App 到 Django REST API 的 API 请求 - 被 CORS 阻止

CakePHP 3 REST API + CORS 请求和选项方法

JIRA REST API cors

我的请求是跨源请求吗?(heroku 上的 Django rest api,CORS 没有阻止我的请求)

Java Spring REST API CORS 不适用于通过 jQuery 和 Chrome 的 DELETE 请求