不能app.get('foo')(Express / Node JS)

时间:2017-05-09 13:50:52

标签: javascript node.js socket.io

我目前正致力于在特定网站中添加实时聊天功能。我正在使用Express JS软件包,初始化信息(即启动/监听服务器等)位于“www / bin”(默认情况下)。

所以,这是我的初始文件(即'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);

事情是我无法“获取”这个SocketIO声明,因为我需要在其中一个路由器文件中在客户端/服务器之间交换消息。

这是路线档案:

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;

所以,当我尝试app.get('socketio)'时,它会返回undefined

您知道我如何正确声明此app.get('socketio',io)以便我可以在任何地方访问它(但不能访问请求方法)

错误:

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

TypeError: Cannot read property 'on' of undefined

1 个答案:

答案 0 :(得分:0)

首先,我们需要将我们的函数(在{1}}中包含在一个单独的文件中。

其次,我们需要添加到' www / bin'所以服务器也可以收听它。答案是我们改变了www / bin':

io.on('connection', ...)

这就是答案。