I'm trying to figure out how to create a real time chat application that uses Vue.js for the front-end, Node.js for the back-end and socket.io.
I've generated my back-end Node.js project with express-generator and the project is accessible at http://localhost:3000. In this project I have an app.js file that contains this:
var express = require('express');
var http = require('http').createServer(express);
var io = require('socket.io')(http);
io.on('connection', (socket) => {
console.log('a user connected');
});
My front-end is a Vue.js project accessible from http://localhost:8080 and the component that is meant to connect to my back-end contains this:
<template>
<div class="home">
</div>
</template>
<script>
import socket from 'socket.io-client'
export default {
mounted(){
socket.connect('http://localhost:3000')
}
}
</script>
Sadly the socket connection doesn't seem to go through. On the front-end console I get these errors -
localhost/:1 Access to XMLHttpRequest at 'http://localhost:3000/socket.io/?EIO=3&transport=polling&t=N6Kc6yn' from origin 'http://localhost:8080' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.
And on the back-end console I get this error - GET /socket.io/?EIO=3&transport=polling&t=N6KcMan 404 3.089 ms - 975
I tried installing cors through npm install cors and added the required code but nothing really happened. It looks like this:
var express = require('express');
var cors = require('cors');
var app = express();
app.use(cors());
var http = require('http').createServer(express);
var io = require('socket.io')(http);
io.on('connection', (socket) => {
console.log('A user has connected!');
});
I can't figure out why is this happening.