Socket.IO не работает с Angular несмотря на разрешение источника - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь использовать socket.io для подключения моего приложения angular 8 к моему node.js серверу, мое приложение без проблем использует конечные точки REST на одном и том же сервере, но socket.io всегда завершается ошибкой с ошибкой, связанной с CORS.

Это соответствующая часть с моего сервера:

const app: Application = express();

app.use(cors({credentials: false}));

// The application will have it's routes on /api
app.use("/api", routes);
app.use(express.static(path.join(__dirname+'/public/')));
// Everything else will be redirected to the FE app
app.all("/*", (req: Request, res: Response) => {
    res.sendFile(path.join(__dirname+'/public/index.html'));
})

let port = process.env.PORT || configs.port;

app.listen(port, () => {
    console.log('server online on port', port);
});

let server = require('http').Server(app);
let io = require('socket.io')(server, { origins: ['http://localhost:4200'] });
// io.origins(['http://localhost:4200']);

io.on('connection', function (socket: Socket) {
    console.log('WEB SOCKET CONNECTION');
    socket.emit('news', { hello: 'world' });
    socket.on('my other event', function (data: any) {
        console.log(data);
    });
});

И это на клиенте:

    this.socket = io.connect(configs.baseURL);

Полная ошибка:

Доступ к XMLHttpRequest в 'http://localhost: 8080 / socket.io /? EIO = 3 & transport = polling & t = N1QG96g ' из источника 'http://localhost: 4200 ' имеет был заблокирован политикой CORS: значение заголовка «Access-Control-Allow-Origin» в ответе не должно быть подстановочным знаком «*», если режим учетных данных запроса «включить». Режим учетных данных запросов, инициируемых XMLHttpRequest, контролируется атрибутом withCredentials.

Спасибо за чтение, я погуглил это сообщение об ошибке и нашел некоторые исправления, такие как попытка добавить клиента в происхождение на сервере, но пока ничего не работает.

1 Ответ

1 голос
/ 19 февраля 2020

проход origin: true к промежуточному ПО Cors

app.use(cors({credentials: false, origin: true}));
...