Tengo problemas para enviar datos actuales a nuevas conexiones de socket. Tengo un archivo server.js con el código actual:
servidor.js:
// Importing and initializing npm/node plugins var app = require('express')(); var server = require('http').createServer(app); // Import config settings var config = require('./config.js'); // Create socket server and allow connections from certain ip var io = require('socket.io')(server); io.set('origins', 'http://' + config.url + ':' + config.client_http_port); app.use(require('./routes/index.js')); // Create mongoDB connection mongoose.Promise = global.Promise; mongoose.connect('mongodb://' + config.url + '/' + config.database_name); // Inform new socket connections io.on('connection', function (socket) { console.log('Client connected!'); setTimeout(function () { // socket.emit('variable comes here'); <------------ }, 3000); }); // Open server in port server.listen(config.server_port, function () { console.log('Server listening on port: ' + config.server_port); }); module.exports = app;En mi ruta index.js tengo una variable que quiero pasar a server.js y de ahí a las nuevas conexiones de socket. ¿Cómo podría importar la variable de la ruta index.js al archivo del servidor server.js?
índice.js:
// Importing and initializing npm/node plugins var express = require('express'); var router = express.Router(); var data = {test:'data123'}; // <--------- this one module.exports = router;Si su objeto de datos es estático, puede exportarlo en index.js e importarlo en server.js
Si el objeto de datos se genera o se obtiene (asincrónico), entonces debe crear una función de obtención que se llame desde server.js y devuelva el valor data . Pero tenga en cuenta que los datos pueden no estar undefined , así que después de obtener el objeto, verifique.
Otra solución para datos dinámicos sería crear una función que obtenga datos asíncronos y luego llame a su devolución de llamada proporcionada en server.js ,
Puede exportar el router y la variable de data en su index.js:
module.exports.router = router; module.exports.data = data; Y luego en server.js importar data y router como este:
var router = require('./routes/index.js').router; var data = require('./routes/index.js').data; app.use(router); //instead of app.use(require('./routes/index.js'));