cors vue 前端和 express 后端
cors vue frontend and express backend
我的前端 :8080
和我的后端 :8081
运行 在同一台计算机上 http://192.168.178.20
。如果我在我的计算机上导航到 http://localhost:8080
,一切正常(我可以成功地将请求发送到我的后端)。当我从我的智能手机导航到 http://192.168.178.20:8080
时,前端将按预期显示。但是我无法从我的智能手机向后端发送请求,它认为这与 cors 配置有关,但我无法弄清楚如何正确更改它。
我是否必须在后端以某种方式将我的智能手机列入白名单?当我想在生产模式而不是开发模式下 运行 时,正确的配置看起来如何?
智能手机的私有IP地址(与电脑同一网络)为192.168.178.21
。
我当前的后端配置如下所示:
import cors from 'cors';
import express from 'express';
import cookieParser from 'cookie-parser';
const SERVER_PORT = 8081;
const app = express();
app.use(cors({
origin: ['http://localhost:8080'],
credentials: true
}));
app.use(express.urlencoded({
extended: true
}));
app.use(express.json());
app.use(cookieParser());
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', 'http://localhost:8080');
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Headers', 'x-access-token, Origin, Content-Type, Accept');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
next();
});
// my routes ...
app.listen(SERVER_PORT, () => {
console.log(`Backend is listening on port ${SERVER_PORT}`);
});
提前致谢。
在您的智能手机上,来源是 http://192.168.178.20:8080
,但在您的 CORS 配置中,您只允许 http://localhost:8080
。尝试
app.use(cors({
origin: ['http://localhost:8080', 'http://192.168.178.20:8080'],
allowedHeaders: 'x-access-token',
methods: 'GET, POST, PUT, DELETE, OPTIONS',
credentials: true
}));
并删除显式设置 Access-Control-Allow-*
headers 的(冗余)中间件。 (Origin, Content-Type, Accept
不需要设置为允许 headers,它们总是允许的,除非你的意思是,例如 Content-Type: application/json
。)
客户端(您的智能手机)的 IP 地址无关紧要,只有前端服务器的地址和主机。
我的前端 :8080
和我的后端 :8081
运行 在同一台计算机上 http://192.168.178.20
。如果我在我的计算机上导航到 http://localhost:8080
,一切正常(我可以成功地将请求发送到我的后端)。当我从我的智能手机导航到 http://192.168.178.20:8080
时,前端将按预期显示。但是我无法从我的智能手机向后端发送请求,它认为这与 cors 配置有关,但我无法弄清楚如何正确更改它。
我是否必须在后端以某种方式将我的智能手机列入白名单?当我想在生产模式而不是开发模式下 运行 时,正确的配置看起来如何?
智能手机的私有IP地址(与电脑同一网络)为192.168.178.21
。
我当前的后端配置如下所示:
import cors from 'cors';
import express from 'express';
import cookieParser from 'cookie-parser';
const SERVER_PORT = 8081;
const app = express();
app.use(cors({
origin: ['http://localhost:8080'],
credentials: true
}));
app.use(express.urlencoded({
extended: true
}));
app.use(express.json());
app.use(cookieParser());
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', 'http://localhost:8080');
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Headers', 'x-access-token, Origin, Content-Type, Accept');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
next();
});
// my routes ...
app.listen(SERVER_PORT, () => {
console.log(`Backend is listening on port ${SERVER_PORT}`);
});
提前致谢。
在您的智能手机上,来源是 http://192.168.178.20:8080
,但在您的 CORS 配置中,您只允许 http://localhost:8080
。尝试
app.use(cors({
origin: ['http://localhost:8080', 'http://192.168.178.20:8080'],
allowedHeaders: 'x-access-token',
methods: 'GET, POST, PUT, DELETE, OPTIONS',
credentials: true
}));
并删除显式设置 Access-Control-Allow-*
headers 的(冗余)中间件。 (Origin, Content-Type, Accept
不需要设置为允许 headers,它们总是允许的,除非你的意思是,例如 Content-Type: application/json
。)
客户端(您的智能手机)的 IP 地址无关紧要,只有前端服务器的地址和主机。