【问题标题】:Socet.io not working in routesSocet.io 不在路线中工作
【发布时间】:2018-05-15 01:41:19
【问题描述】:

我已经搜索了所有内容,但我发现的只是使用 socket.io 的基本方法。 我正在尝试在我的一条路线中使用 socket.io,但不能。我正在使用 express、node.js 和 jam。我的问题是我无法在其他路线中访问 io 变量形式的 app.j。我不确定我是否应该每次都调用它。此外,当我尝试要求导出的 app.js 模块时,它说 app.j 找不到。

app.js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var app = express();
//SOCKET/I/o
 var http = require('http').Server(app);
 var io = require('socket.io')(http);
 var port = process.env.PORT || 3000;
//
var login = require('./routes/login');
 var index = require('./routes/index');
var users = require('./routes/users');
var news = require('./routes/news');

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
// TODO Not sure if this is working
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', login);
app.use('/index',index);
app.use('/users', users);
app.use('/news',news);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
 var err = new Error('Not Found');
 err.status = 404;
next(err);
});

// error handler
app.use(function(err, req, res, next) {
 // set locals, only providing error in development
 res.locals.message = err.message;
 res.locals.error = req.app.get('env') === 'development' ? err : {};

 // render the error page
 res.status(err.status || 500);
 res.render('error');
 });
 module.exports = app;

/routes/login.js

  var express = require('express');
 var app = require('./app');
 var firebase = require("firebase");
 var router = express.Router();



router.get('/', function(req, res, next) {
res.render('login');

});

io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
  console.log(data);
});
});
 module.exports = router;

/views/login.jade

doctype html
html    
head 
    title login
    link(rel='stylesheet', href='/stylesheets/main.css')

body
    input(type="email",placeholder="email",id="userEmail")
    input(type="password",placeholder="password",id="userPassword")
script(src="https://cdn.socket.io/socket.io-1.2.0.js")
script.
    socket.on('connection', function (data) {
        console.log(data);
        socket.emit('my other event', {my: 'data'});
    });
button(onclick='signin()') Sign In
button(onclick='signup()') Sign Up

【问题讨论】:

    标签: node.js express socket.io pug


    【解决方案1】:

    由于您没有使用 html-router 运行单页应用程序,因此 Socket.io 实例仅在第一个路由上初始化,因此对于每个路由您都必须这样做:

    var socket = io()
    socket.on('connection', function (data) {
        console.log(data);
        socket.emit('my other event', {my: 'data'});
    });
    

    只有这样它才会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 2017-05-10
      • 2016-11-16
      • 2014-06-17
      相关资源
      最近更新 更多