Mi aplicación.js
const express = require('express'), morgan = require('morgan'), bodyParser = require('body-parser'), path = require('path'), mongoose = require('mongoose'), app = express(), config = require('./config'), Note = require('./models/note'), server = require('http').createServer(app), io = require('socket.io')(server), socket = io.socket; mongoose.connect('mongodb://'+config.db.host+'/'+config.db.name); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); // Serve static assets app.use(express.static(path.resolve(__dirname, '..', 'build'))); app.use(function(req, res, next) { const allowedOrigins = [ 'http://127.0.0.1:8000', 'http://localhost:8000', 'http://127.0.0.1:3000', 'http://localhost:3000']; const origin = req.headers.origin; if(allowedOrigins.indexOf(origin) > -1){ res.setHeader('Access-Control-Allow-Origin', origin); } //res.header("Access-Control-Allow-Origin", "127.0.0.1 localhost"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header('Access-Control-Allow-Credentials', true); next(); });
llamando a socket.emit()
en los controladores después de los códigos anteriores.
Mi index.js
'use strict'; const app = require('./app'), // server = http.createServer(app), PORT = process.env.PORT || 8000; app.listen(PORT, () => { console.log(`REST API running on ${PORT}!`); });
Salida de la consola:
¿Alguna idea? Gracias
Si vas a hacer esto:
server = require('http').createServer(app),
Entonces, no puedes hacer:
app.listen(PORT, ...);
porque app.listen()
creará un servidor nuevo y diferente y socket.io no estará asociado con ese.
En su lugar, debe hacer:
server.listen(PORT, ...)
usando el valor del server
de app.js. Y, si desea require()
en el servidor desde app.js, también debe exportarlo desde app.js (algo más que no veo que haga su código).
Como referencia, el código para app.listen()
, hace esto:
app.listen = function listen() { var server = http.createServer(this); return server.listen.apply(server, arguments); };
Puedes ver cómo crea un servidor diferente al que le pasaste a socket.io. Por lo tanto, el que pasó a socket.io nunca se inicia y, por lo tanto, socket.io no funciona.