如何修复CORS的“Access-Control-Allow-Origin”错误?
如何修复CORS的“Access-Control-Allow-Origin”错误?
我试图向我的Express服务器发送一个POST请求,但它总是抛出以下错误:\n由于CORS策略的限制,无法从源\'http://localhost:3000\'访问\'http://localhost:4000/users/sign-up\'。预检请求的响应未通过访问控制检查:所请求的资源上没有\'Access-Control-Allow-Origin\'头。如果不需要透明响应,请将请求的模式设置为\'no-cors\'以禁用CORS获取资源。\n以下是我如何设置我的服务器(使用TypeScript):\n
import express, { Application } from 'express'; import * as dotenv from 'dotenv'; import { databaseConnect, serverConnect } from './modules/connections'; import bodyParser from 'body-parser'; import cors from 'cors'; import devicesRouter from './routes/dashboard'; import usersRouter from './routes/users'; import announcementsRouter from './routes/announcements'; import ordersRouter from './routes/orders'; // 初始化express const app: Application = express(); // 服务器配置 dotenv.config(); await databaseConnect(); app.use(express.json()); app.use(bodyParser.json()); app.use(cors({ origin: "http://localhost:3000", credentials: true })); // 定义服务器路由 app.use('/devices', devicesRouter); app.use('/users', usersRouter); app.use('/announcements', announcementsRouter); app.use('/orders', ordersRouter); // 连接服务器 serverConnect();
\n在我的客户端中,我使用fetch API发送POST请求:\n
const response = await fetch("http://localhost:4000/users/sign-up", { method: "POST", headers: { "Accept": "application/json", "Content-Type": "application/json", "Access-Control-Allow-Origin": "http://localhost:3000" }, body: JSON.stringify(signUpData) });
\n我看过很多关于安装cors包来解决这个错误的视频,但不知何故对我并没有起作用。\n我尝试重新安装cors和@types/cors包,但没有任何变化。\n我还尝试使用以下代码替代:\n
app.use(cors({ origin: "http://192.168.1.3:3000", credentials: true }));
\n而不是:\n
app.use(cors({ origin: "http://localhost:3000", credentials: true }));
\n但它也没有起作用。
CORS(Cross-Origin Resource Sharing)错误指的是在进行跨域资源访问时出现的问题。当客户端从一个域名的网页去请求另一个域名的资源时,如果两个域名不一致,就会触发CORS错误。
解决CORS错误的常见方法是在服务器端设置响应头部信息,指定允许访问的源(origin)。根据提供的代码片段,可以使用express的cors中间件来解决这个问题。
具体做法如下:
1. 首先,引入express和cors中间件:
const express = require('express'); const cors = require('cors');
2. 创建一个express实例:
const app = express();
3. 使用cors中间件,并设置允许访问的源为'*'(或者你的源地址,例如'http://localhost:9000'):
app.use(cors({ origin: '*' }));
以上代码将允许任何源进行跨域访问。如果你只想允许特定的源进行访问,可以将origin的值设为对应的源地址。
通过以上步骤设置了cors中间件后,服务器会在响应头部信息中添加'Access-Control-Allow-Origin'字段,指定允许访问的源。这样就解决了CORS错误。
希望以上解决方法能够帮助到你解决CORS 'Access-Control-Allow-Origin'错误。如果之前尝试过这种方法但没有生效,可能是由于其他原因导致的。