Обработка cors в узле и экспрессе

avatar
Gurkiran Singh
1 июля 2021 в 20:10
46
2
-1

Мой основной файл app.js выглядит так

const colors = require("colors");
const path = require("path");
const http = require("http");
const express = require("express");
const { notFound, errorHandler } = require("./middleware/error");
const connectDB = require("./db");
const { join } = require("path");
const cookieParser = require("cookie-parser");
const logger = require("morgan");
const cors = require("cors");

const authRouter = require("./routes/auth");
const userRouter = require("./routes/user");
const s3Router = require("./routes/s3");
const requestRouter = require('./routes/request');
const notificationRouter = require("./routes/notification");
const convoRouter = require("./routes/convo");
const messageRouter = require("./routes/message");
const profileRouter = require("./routes/profile");

const { json, urlencoded } = express;

// socket connection
const { appSocket } = require("./socket");

connectDB();
const app = express();
app.use(cors());
const server = http.createServer(app);

Я передаю cors в express экземпляр приложения, а затем передаю его в http.createServer(app) Но все же я получаю эту ошибку cors.

Доступ к извлечению по адресу «http://localhost:3001/auth/user» из источника «http://localhost:3000» заблокирован политикой CORS: значение «Access-Control-Allow-Origin ' в ответе не должен быть подстановочный знак '*', когда режим учетных данных запроса установлен на 'включить'.

Источник

Ответы (2)

avatar
Quentin
1 июля 2021 в 20:12
1

Значение заголовка "Access-Control-Allow-Origin" в ответе не должно быть подстановочным знаком "*", если режим учетных данных запроса "включить".

… это то, что промежуточное ПО cors будет использовать по умолчанию, если в конфигурации не указано иное.

Укажите свое происхождение:

app.use(cors({
    origin: 'http://localhost:3000'
}));

… более сложные подходы описаны в руководстве.

avatar
Shubham Kumar
1 июля 2021 в 20:32
0

Значением заголовка 'Access-Control-Allow-Origin' в ответе является подстановочный знак '*' по умолчанию при использовании промежуточного ПО cors.

Таким образом, если вы получаете эту ошибку, то для этого может быть 3 наиболее вероятные причины:

  1. Вы используете какой-то маршрут, который использовался до применения ПО промежуточного слоя cors.
app.use("/",someRouter); // Using this route will give cors

// ...

app.use(cors());

// ...

app.use("/",otherRouter); // Using this route will work fine
  1. Ошибки Cors иногда пропускают ведущие, т.е. предположим, что вы загружаете какой-то большой файл, и ваш сервер не может обработать такой большой файл, тогда вы также можете получить cors или предположим, что ваш сервер выходит из строя, тогда вы также можете получить эту ошибку.
  2. Наконец, это наименее вероятная ошибка, заключающаяся в том, что вы, возможно, повторно изменили cors на каком-то маршруте, поэтому вы получаете cors.

Мне кажется, ваш код для CORS подходит. Найдите две основные возможности, которые могли произойти.

Quentin
1 июля 2021 в 21:34
0

«Значение заголовка Access-Control-Allow-Origin в ответе по умолчанию — подстановочный знак '*'» — да, проблема в этом.

Quentin
1 июля 2021 в 21:34
0

«Вы используете какой-то маршрут, который использовался до применения промежуточного программного обеспечения cors». — Нет. Если бы это было проблемой, то заголовок отсутствовал бы и не имел подстановочного знака.

Quentin
1 июля 2021 в 21:34
0

«Ошибки Cors иногда пропускают интерлиньяж» — это не так.

Quentin
1 июля 2021 в 21:35
0

«Наконец, это наименее вероятная ошибка, заключающаяся в том, что вы, возможно, повторно изменили cors на каком-то маршруте, поэтому вы получаете cors». — Он установлен только в одном месте, и это неправильно.

Shubham Kumar
1 июля 2021 в 21:58
0

Извините, я неправильно истолковал вопрос и фактически пропустил «не» в вопросе.