#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