2017-05-09 6 views
0

Ich arbeite derzeit daran, einen Echtzeit-Chat in eine bestimmte Website hinzuzufügen. Ich verwende Express JS-Paket und die Initialisierungsinformationen (d. H. Start/Listener-Server usw.) befinden sich (standardmäßig) in "www/bin".kann nicht app.get ('foo') (Express/Node JS)

Also, das ist meine Init-Datei (dh ‚www/bin‘):

/** 
* Module dependencies. 
*/ 

var app = require('../app'); 
var debug = require('debug')('nodeblog:server'); 
var http = require('http'); 

/** 
* Get port from environment and store in Express. 
*/ 

var port = normalizePort(process.env.PORT || '3000'); 
app.set('port', port); 

/** 
* Create HTTP server. 
*/ 

var server = http.createServer(app); 

/** 
    * Listen to Sockets 
    */ 
var io = require('socket.io').listen(server); 
app.set('socketio', io); // FIXME: Cannot app.get('socketio') w/out req 


/** 
* Listen on provided port, on all network interfaces. 
*/ 

server.listen(port); 
server.on('error', onError); 
server.on('listening', onListening); 

Und die Sache ist, dass ich nicht ‚get‘ diese SocketIO Erklärung, wie ich in einem der Router-Dateien müssen Nachrichten zwischen Client/Server austauschen. Hier

ist diese Route-Datei:

var express = require('express'); 
var router = express.Router(); 
var app = express(); 
// Models 
var auth = require('../models/auth'); 

var io = app.get('socketio'); 

router.get('/', auth.ensureAuthenticated, function(req, res, next) { 
    res.render('chat', { 
    title: 'Chat' 
    }); 
}); 

io.on('connection', function(socket){ 
    console.log('a user connected'); 

    socket.on('chat message', function(msg) { 
    io.emit('chat message', msg); 
    }); 

    socket.on('disconnect', function(){ 
    console.log('user disconnected'); 
    }); 
}); 

module.exports = router; 

Also, wenn ich zu app.get versuchen ('socketio)' es gibt undefined

Wissen Sie, wie muss ich richtig dieses app.get('socketio',io) erklären so dass ich es kann überall zugreifen (aber nicht in die Anforderungsmethoden)

Fehler:

chat.js:15 
io.on('connection', function(socket){ 
^

TypeError: Cannot read property 'on' of undefined 

Antwort

0

Zuerst müssen wir unsere Funktion trennen (enthält io.on('connection', ...) in einer separaten Datei.

Zweitens müssen wir zu "www/bin" hinzufügen, damit der Server es auch hören kann. Die Antwort ist, wenn wir in 'www/bin' ändern:

var io = require('socket.io').listen(server); 
require('../models/socketio.js')(io); 

Das ist die Antwort.

Verwandte Themen