根据我的研究,我的配置应该没问题,并且cors没有问题。当我使用axios从localhost:3000向我在localhost:8000上的api发出发布请求时,我看到以下错误消息:
从“ http://localhost:8000/api/tags/”访问XMLHttpRequest 原产地“ http://localhost:3000”已被CORS政策禁止:否 请求中存在“ Access-Control-Allow-Origin”标头 资源。
这是我的server.js配置设置:
const express = require('express');
const next = require('next');
const cors = require('cors');
const bodyParser = require('body-parser');
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare().then(() => {
const server = express();
server.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Credentials", true);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
next();
});
server.use(bodyParser.json()); // support json encoded bodies
server.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
server.use(cors({
origin: '*',
credentials: true,
}));
server.all('*', (req, res) => {
return handle(req, res);
});
server.listen(port, (err) => {
if (err) throw err;
console.log(`> Ready on http://localhost:${port}`);
});
});
我基本上是想从端口3000上的next.js应用程序向端口8000上的laravel服务器/ api发出请求。 谁能看到我的问题?
答案 0 :(得分:0)
您有点误解了CORS标头的概念。这些标头需要在服务器端指定,您可以在客户端(NodeJs)端设置它们。
因此,如果您要在Laravel应用程序上设置标头,那应该没问题。我不喜欢Laravel,但是我很确定有内置的函数或软件包可以为您处理这些事情。我还建议您多读一些有关CORS的内容,https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS