【问题标题】:CORS issue in express.js projectexpress.js 项目中的 CORS 问题
【发布时间】:2019-07-18 13:12:03
【问题描述】:

我正在尝试开发一个 MERN 项目。我在express.jsserver.js 文件中的代码如下所示。

const express = require('express');
const bodyParser = require('body-parser');
const addressroute = require('./api/routes/address');
const userroute = require('./api/routes/user');
const mongoose = require('mongoose');
mongoose.set('useCreateIndex', true);
mongoose.connect('mongodb://localhost/addresses', { useNewUrlParser: true });
const db = mongoose.connection;

var cors = require('cors');


let app = express();
app.use(bodyParser.urlencoded( { extended:true } ));
app.use(bodyParser.json());
app.use('/api/address', addressroute);
app.use('/api/users', userroute);
app.use(cors());
app.options('*', cors());
const PORT = process.env.PORT || 4000;
app.listen(PORT);

我使用npm install cors --save这个命令安装了CORS。

我遇到了错误。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:4000/api/users/register. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).[Learn More]
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:4000/api/users/register. (Reason: CORS request did not succeed).

【问题讨论】:

标签: node.js reactjs express cors


【解决方案1】:

尝试将cors 移动到您的路线上方:

const app = express();
const PORT = process.env.PORT || 4000;

app.use(bodyParser.urlencoded( { extended:true } ));
app.use(bodyParser.json());
app.use(cors());
app.use('/api/address', addressroute);
app.use('/api/users', userroute);
app.listen(PORT);

【讨论】:

    【解决方案2】:

    尝试使用以下代码sn-p:

    app.all('/*', function(req, res, next) {
      res.header("Access-Control-Allow-Origin", "*");
      res.header("Access-Control-Allow-Headers", "X-Requested-With");
      next();
    });
    

    【讨论】:

      【解决方案3】:
      // Try to use the following code   
      app.use(function(req, res, next) {
            res.header("Access-Control-Allow-Origin", "*");
            res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
            next();
          });
      

      【讨论】:

        【解决方案4】:

        您应该在定义路由之前移动要执行的 CORS 中间件 (app.use(cors());)。在您在此处添加的 sn-p 中,不会在每个请求上调用 CORS 中间件

        【讨论】:

          【解决方案5】:

          应该在您的路线之前启用或包含 Cors。

          const express = require('express');
          const cors = require('cors');
          const bodyParser = require('body-parser');
          const addressroute = require('./api/routes/address');
          const userroute = require('./api/routes/user');
          const mongoose = require('mongoose');
          mongoose.set('useCreateIndex', true);
          mongoose.connect('mongodb://localhost/addresses', { useNewUrlParser: true });
          const db = mongoose.connection;
          
          
          
          let app = express();
          app.use(bodyParser.urlencoded( { extended:true } ));
          app.use(bodyParser.json());
          
          app.use(cors());
          
          app.use('/api/address', addressroute);
          app.use('/api/users', userroute);
          const PORT = process.env.PORT || 4000;
          app.listen(PORT);
          

          【讨论】:

            【解决方案6】:

            从前端调用你的 api 时添加 '访问控制允许来源':'*' 在请求的标头中。

            【讨论】:

            • 也许您指的是 Origin 标头,但这不是导致 OP 在这里提到的错误的原因
            猜你喜欢
            • 2017-05-09
            • 2020-11-24
            • 2017-01-03
            • 2017-12-05
            • 2018-07-16
            • 1970-01-01
            • 1970-01-01
            • 2020-02-10
            • 2021-11-17
            相关资源
            最近更新 更多