ExpresJS Cors问题:所请求的资源上不存在“ Access-Control-Allow-Origin”标头

时间:2019-03-26 20:40:38

标签: node.js express cors axios

根据我的研究,我的配置应该没问题,并且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发出请求。 谁能看到我的问题?

1 个答案:

答案 0 :(得分:0)

您有点误解了CORS标头的概念。这些标头需要在服务器端指定,您可以在客户端(NodeJs)端设置它们。

因此,如果您要在Laravel应用程序上设置标头,那应该没问题。我不喜欢Laravel,但是我很确定有内置的函数或软件包可以为您处理这些事情。我还建议您多读一些有关CORS的内容,https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS