2014-02-18 4 views
2

я начала работы на узле JS и облицовочные проблемы с Io Lib, здесь ошибка:NodeJS ReferenceError: ИО не определен

ReferenceError: io is not defined 
    at exports.index (D:\dev\lib\index.js:9:5) 
    at callbacks (D:\dev\node_modules\express\lib\router\index.js:164:37) 
    at param (D:\dev\node_modules\express\lib\router\index.js:138:11) 
    at pass (D:\dev\node_modules\express\lib\router\index.js:145:5) 
    at Router._dispatch (D:\dev\node_modules\express\lib\router\index.js:1 73:5) 
    at Object.router (D:\dev\node_modules\express\lib\router\index.js:33:1 0) 
    at next (D:\dev\node_modules\express\node_modules\connect\lib\proto.js:190:15) 
    at Object.methodOverride [as handle] (D:\dev\node_modules\express\node_modules\connect\lib\middleware\methodOverride.js:49:5) 
    at next (D:\dev\node_modules\express\node_modules\connect\lib\proto.js:190:15) 
    at Object.urlencoded [as handle] (D:\dev\node_modules\express\node_modules\connect\lib\middleware\urlencoded.js:51:37) 

Вот содержание моего app.js файла:

var express = require('express'); 
var path = require('path'); 

var app = express(), 
    server = require('http').createServer(app), 
    io = require('socket.io').listen(server), 
    fs = require('fs'); 

app.set('port', process.env.PORT || 8080); app.set('views', 
path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
app.use(express.favicon()); app.use(express.logger('dev')); 
app.use(express.json()); app.use(express.urlencoded()); 
app.use(express.methodOverride()); app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.get('/', require('./lib').index); 

server.listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

мой файл Lib/index.js:

exports.index = function(req, res){ 
    res.render('index'); 
    io.sockets.on('connection', function (socket) { 
     socket.emit('message', 'welcome'); 
    }); 
}; 

кто-нибудь может мне помочь?

ответ

2

Вам необходимо пройти io к маршруту:

exports.index = function(io) { 
    return function(req,res) { 
     res.render('index'); 
     io.sockets.on('connection', function (socket) { 
      socket.emit('message', 'welcome'); 
     } 
    } 
} 

А затем вызвать его как функцию в app.get:

app.get('/', require('./lib').index(io)); 

Я бы рекомендовал объявить require('./lib') часть с вашими другими переменными. Это позволит повторно использовать код и улучшать читаемость (что касается каждого человека).

var /*other variables*/, 
    lib = require('./lib'); 

Тогда вы можете просто сделать app.get('/', lib.index(io));

Просто мысли.

+0

Это сработало, очень спасибо Кристофер! :) – Tyrael

Смежные вопросы