Ich versuche, socket.io an einen Router übergeben und dann einen Anruf von diesem Router, aber es wird nie ausgegeben. Ich vermute ein Problem in socket.io, das an den Router weitergegeben wird.Socket.io nicht von Router
wie app.js Aussehen:
//app.js
var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var logger = require('morgan');
var weather = require('./routes/weather');
server.listen(3000, function() {
weather.refreshWeather();
console.log('Listening on http://localhost:3000');
});
app.use(logger('dev'))
app.use(express.static(__dirname + '/public'))
app.use('/', weather.router(io));
app.set('view engine', 'jade');
module.exports = app;
wie weather.js Aussehen:
//weather.js
var express = require('express');
var router = express.Router();
var returnRouter = function (io) {
router.get('/weather', function (req, res, next) {
console.log('About to emit!');
io.sockets.emit('weather', {
temperature : '12' // this is just a test value
});
res.render('weatherpage');
next();
});
return router;
}
module.exports = {
router: returnRouter, // exports variable
refreshWeather : refreshWeather // exports function
}
und schließlich, wie Jade aussieht:
//weatherpage.jade
doctype html
html
head
link(rel='stylesheet', href='/css/index.css')
title Dashboard
body
script(src='/socket.io/socket.io.js')
script.
var socket = io();
socket.on('weather', function(data){
document.getElementById('weather').innerHTML = data.temperature
});
Es ist wirklich ein Designfehler, zu versuchen, eine Seite zu aktualisieren, die Sie gerade mit socket.io rendern wollen. Sie rendern eine Vorlage, die Seite ist noch nicht geladen oder über socket.io verbunden. Verwenden Sie keine Timer, um dies zu hacken. Fügen Sie einfach die Anfangsdaten IN die Vorlage selbst ein (deshalb verwenden Sie Vorlagen an erster Stelle (so können Sie Daten in diese einfügen). Verwenden Sie socket.io nicht für den Anfangswert der Temperatur. Sie können socket.io für die Aktualisierung verwenden Temperaturen nach dem Laden der Seite – jfriend00