【问题标题】:MERN. Blocked by CORS policy默恩。被 CORS 政策阻止
【发布时间】:2020-07-29 12:15:19
【问题描述】:

我试图将 req 发送到服务器,但被“CORS 策略阻止”我让 ngrok 在后台运行,我在 axios 中使用它的链接作为 baseUrl,我使用了 app.use(cors()), "proxy":"link' 在前面部分,我也尝试过 http-proxy-middleware,但我仍然遇到 CORS 问题

http-proxy
----------
  app.use(
    proxy('/auth/google', {target: 'http://localhost:2000', changeOrigin: true})
  );
  app.use(
    proxy('/api/**', {target: 'http://localhost:2000', changeOrigin: true})
  );
Express
--------
require('dotenv').config();
require('./server/models/Query');
require('./server/models/User');
const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const cors = require('cors');
const keys = require('./server/config/keys');
const authRoutes = require('./server/routes/authRoutes');
const queryRoutes = require('./server/routes/queryRoutes');
const feedRoutes = require('./server/routes/feedRoutes');

const app = express();

app.use(bodyParser.json());
app.use(authRoutes);
app.use(queryRoutes);
app.use(feedRoutes);

mongoose.connect(process.env.MONGO_URI, {
  useNewUrlParser: true,
  useCreateIndex: true,
});


app.use(cors());

const PORT = process.env.PORT || 2000;

app.listen(PORT);

authRoute
---------
router.post('/signup', async (req, res) => {
  const {email, password, type, fName, lName, city} = req.body;
  console.log('body from signup', res.body);
  try {
    const user = new User({
      type,
      fName,
      lName,
      city,
      email,
    });
    await user.save();
    const token = jwt.sign({userId: user._id}, process.env.COOKIE_KEY);
    console.log(token);
    res.send({token});
  } catch (err) {
    return res.status(422).send(err.message);
  }
});

【问题讨论】:

    标签: reactjs express cors


    【解决方案1】:

    我应该在任何路线之前移动 cors()

    【讨论】:

      【解决方案2】:

      在 express 服务器中有不同的处理 cors 的方法。试试这个。我在我的每个节点快递服务器中使用此代码段来解析 cors。

      //Cross Origin Handle Middleware
      app.use((req, res, next) => {
        res.header('Access-Control-Allow-Origin', '*');
        res.header('Access-Control-Allow-Headers', 
        'Origin, X-Requested-With, Content-Type, Accept, Authorization'
        );
        if( req.method === 'OPTIONS'){
          req.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
          return res.status(200).json({});
        }
        next();
      });
      

      你必须在猫鼬连接后使用这个中间件。无需为此使用 cors 库。如果您要使用这种中间件方法。我认为这会有所帮助。 :)

      【讨论】:

      • 不,我仍然得到这个:从源 'bfceac75.ngrok.io/signup' 访问 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
      • 您在使用中间件时删除了app.use(cors()); 这段代码。正确的?啊哈。您也在使用代理。使用代理也是一种避免cors的方法。只需测试删除这些代理的 api 并为 http 请求放置确切的 url。
      • 我仍然收到此错误,无论如何感谢您的帮助
      猜你喜欢
      • 2020-06-29
      • 2018-03-22
      • 2021-09-17
      • 2021-06-13
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      相关资源
      最近更新 更多