在部署后端API时,请求的资源缺少 'Access-Control-Allow-Origin' 响应头
我创建了一个小型后端服务器,只有两种请求方式:一个GET,一个POST。
在尝试部署时,它在Railway上崩溃,在Vercel上则不允许请求。
在使用Vercel时,我收到的前端错误。
Access to fetch at 'https://auth-backend-livid.vercel.app/serial' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我的server.js代码
const mongoose = require('mongoose');
const dotenv = require('dotenv');
const app = require('./app');
dotenv.config({ path: './config.env' });
const dbAtlasLink = process.env.DB_LINK.replace('<db_password>', process.env.DB_PASSWORD);
mongoose.connect(dbAtlasLink);
const portNo = process.env.PORT || 8080;
app.listen(portNo);
我的app.js代码
const express = require('express');
const cors = require('cors');
const serialRouter = require('./routes/serial.router');
const app = express();
app.use(express.json());
app.use(cors({
origin: '*',
methods: '*',
allowedHeaders: '*'
}));
app.options('*', cors());
app.use('/serial', serialRouter);
app.get('/', (req, res) => {
res.send('API running');
});
module.exports = app;
解决方案
app.use(cors({
origin: 'https://auth-backend-livid.vercel.app',
methods: '*',
allowedHeaders: '*'
}));
CORS的要点是至少指定一个来源,否则把 * 指定为允许的来源、允许的方法和允许的头信息,基本上等同于“不要使用CORS”。服务器根本不发送任何CORS响应头——至少这就是在启用CORS的 .NET后端时的行为,所以我在想你的Node后端是不是也是这样。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。