简体   繁体   English

NodeJS ReferenceError:io未定义

[英]NodeJS ReferenceError: io is not defined

I'm getting started on node JS and facing an issue with io lib, here the error :我开始使用节点 JS 并面临 io lib 问题,这里是错误:

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)

Here is the content of my app.js file :这是我的 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')); 
});

my file lib/index.js :我的文件 lib/index.js :

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

Can anyone help me?谁能帮我?

You need to pass io to your route:您需要将io传递给您的路线:

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

And then call it as a function in app.get :然后在app.get其作为函数app.get

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

I'd recommend declaring the require('./lib') part with your other variables.我建议使用其他变量声明require('./lib')部分。 This would allow for code reuse and better readability (which is relative to each person).这将允许代码重用和更好的可读性(这是相对于每个人的)。

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

Then you could just do app.get('/', lib.index(io));然后你可以做app.get('/', lib.index(io));

Just a thought.只是一个想法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM