-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
117 lines (93 loc) · 3.5 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// Crear el servidor
const express = require('express');
const passport = require('passport');
const jwt = require('jsonwebtoken');
const App = express();
// Socket.io
const { Server } = require('socket.io');
const HTTP = require('http');
// CORS
const CORS = require('cors');
App.use(CORS());
// let optionsRoutesCORS = {
// origin: function (origin, callback) {
// if (origin === "https://frontendhandbook.fly.dev" || origin === "https://flyhandbook.fly.dev") {
// callback(null, true)
// } else {
// callback("ERROR DE CORS - NO VIENES DEL ORIGEN PERMITIDO")
// }}
// };
// Variables de entorno
require('dotenv').config();
// Passport config
App.use(passport.initialize());
require('./Middleware/index.js');
// Utilizar JSON en la API
App.use(express.json());
// Ruta inicial o de bienvenida
App.get('/', (req, res) => {
res.send("📚 BIENVENIDO A HANDBOOK 📚");
})
// Routes
App.use(require('./Routes/Users.controller'));
App.use(require('./Routes/BibliographicMaterial.controller'));
App.use(require('./Routes/Communities.controller'));
App.use(require('./Routes/Events.controller'));
App.use(require('./Routes/Exchange.controller'));
App.use(require('./Routes/Members.controller'));
App.use(require('./Routes/Message.controller'));
App.use(require('./Routes/Posts.controller'));
App.use(require('./Routes/SelectedBook.controller'));
App.use(require('./Middleware/Response'));
// Crear servidor http de node basado en el de express
const httpServer = HTTP.createServer(App);
// Conexión desde el servidor
const io = new Server(httpServer, {
cors: {
origin: ["https://frontendhandbook.fly.dev", "http://localhost:3001"]
}
});
io.use((socket, next) => {
if (socket.handshake.query && socket.handshake.query.token) {
jwt.verify(socket.handshake.query.token, process.env.JWTPASSWORD, function (err, decoded) {
if (err) return next(new Error('Authentication error'));
socket.decoded = {
...decoded,
exchange: socket.handshake.query.exchange
};
next();
})
} else {
next(new Error('Authentication error'));
}
}).on('connection', (socket) => {
console.log("NUEVA CONEXIÓN");
socket.join(socket.decoded.exchange);
const Client = require('./Database/Message');
const MessageClient = new Client();
const ClientExchange = require('./Database/Exchange');
const ExchangeClient = new ClientExchange();
socket.on('getMessage', async () => {
let Messages = await MessageClient.readMessages(socket.decoded.exchange)
socket.emit('messages', Messages)
})
socket.on('sendMessage', async (message, exchange) => {
const Exchange = await ExchangeClient.getExchange(exchange);
let Destiny = '';
if (Exchange[0].Id_User_One[0]._id.toString() === socket.decoded.sub) {
Destiny = Exchange[0].Id_User_Two[0]._id.toString()
} else {
Destiny = Exchange[0].Id_User_One[0]._id.toString()
}
let newMessage = await MessageClient.createMessage(exchange, message, socket.decoded.sub, Destiny);
let Messages = await MessageClient.readMessages(socket.decoded.exchange);
io.to(socket.decoded.exchange).emit('messages', Messages)
})
socket.on("disconnect", () => {
console.log("CONEXIÓN DESCONECTADA");
});
});
// Puerto a escuchar
httpServer.listen(process.env.PORT || 3000, () => {
console.log("Servidor corriendo en el puerto: " + process.env.PORT || 3000);
})