Доступ к XMLHttpRequest на «локальном хосте:3000/пользователи» из источника ‘http://localhost:62521″ был заблокирован политикой CORS

#node.js #flutter #rest #dart #cors

Вопрос:

Я получаю эту ошибку, даже несмотря на то, что я разрешил CORS в своем коде. Этот находится в узле js:

 app.use(cors());

app.get('/users', (req, res) => {
    res.set({
        'Access-Control-Allow-Headers': '*',
        'Access-Control-Allow-Methods': 'POST,GET,DELETE,PUT,OPTIONS'
    });

    User.find({}, function(err, users){
        

        if(err)
        {
            return res.status(500).send({err});
        }
        return res.send(users);
    });
});
 

Я просто пытаюсь выполнить запрос GET от http://localhost:3000/users использование флаттера:

 import 'package:retrofit/http.dart' as head;

@head.RestApi(baseUrl: "http://localhost:3000")
abstract class ApiClient {
  factory ApiClient(Dio dio, {String baseUrl}) = _ApiClient;

  @head.GET("/users")
  Future<User> getUsers();
}
 

Выполнение этого запроса на получение отлично работает в Postman, но не работает в Flutter из-за CORS. Кто-нибудь может помочь с этим?

Комментарии:

1. Ошибка должна сообщить вам, какой заголовок вы пропускаете. Это, вероятно, тот, который заканчивается -Origin

2. Я также попробовал это @Evert, но безрезультатно. Спасибо вам за ваш ответ.

Ответ №1:

Вам разрешены только заголовки и методы, попробуйте добавить Access-Control-Allow-Origin и назначить их * URL-адресам или веб-сайтам.

 res.set({
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Headers': '*',
        'Access-Control-Allow-Methods': 'POST,GET,DELETE,PUT,OPTIONS'
});
 

Комментарии:

1. Спасибо вам за ваш ответ Pyxl. Я пытался также добавить это, но безрезультатно.

2. Привет, спасибо за пометку, но так как мой ответ не решил ваших проблем, я предлагаю вам снять пометку с моего ответа.

Ответ №2:

Вы используете Экспресс? Попробуй это:

 const express = require("express");
const app = express();
...
const cors = require("cors");
...
const corsOptions = {
  origin: ['http://localhost:62521'],
  optionsSuccessStatus: 200, // some legacy browsers     (IE11, various SmartTVs) choke on 204
};
app.use(cors(corsOptions)); // CORS policy