簡體   English   中英

NodeJS ReferenceError:io未定義

[英]NodeJS ReferenceError: io is not defined

我開始使用節點 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)

這是我的 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');
    });
};

誰能幫我?

您需要將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

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

我建議使用其他變量聲明require('./lib')部分。 這將允許代碼重用和更好的可讀性(這是相對於每個人的)。

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

然后你可以做app.get('/', lib.index(io));

只是一個想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM