2017-11-08 7 views
1

ビン/routes/indexからio.emit()にアクセスするには?特急4.15

var server = http.createServer(app); 
io = require('socket.io')(server); 
io.on('connection', function(client) { 
console.log('Client connected...'); 
client.on('join', function(data) { 
    console.log(data); 
}); 
}); 

server.listen(port); 

をwww.jsここで私は(私はそれが可能であるかどうか知らない?)socket.io介してメッセージやマングース結果にアクセスしたり、送信する必要がある上

I routes/index.jsページからクライアントにメッセージを送信する必要があります。私は=は( '../ binに/ WWW')が必要です。この のvar IOなどのindex.jsであり、

module.exports.io = io; //(in `bin/www`) 

とアクセスタイIOを試してみました何 。

io.on('connection', function(client) { 
console.log('Client connected...'); 
client.on('join', function(data) { 
    console.log(data); 
}); 
}); 

が、それは私の必要性は、私はルートが呼び出されるときにクライアントに動的に結果を送信する場合、またはsocket.ioさを使用して、クライアントにいくつかmongooseクエリ結果を送信 ある

io.on('connection', function(client) { 
^ 
TypeError: io.on is not a function.... 

若干の誤差がthowsそれは可能ですか?エクスプレス4.15 var server = http.createServer(app);

ビンにある/

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 index = require('./routes/index'); 
var users = require('./routes/users'); 

var app = express(); 

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

// uncomment after placing your favicon in /public 
//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(function(req, res, next) { 
req.headers['if-none-match'] = 'no-match-for-this'; 
next(); 
});*/ 



//app.use(express.static(path.join(__dirname, 'public'))); 
app.use(express.static(path.join(__dirname, 'public'), { 
maxAge: '30d', 
setHeaders: function (res, path) { 
     res.setHeader('Cache-Control', 'public, max-age=14770') 
} 
})); 

console.log("PATH"+path.join(__dirname, 'public')); 

app.io = require('socket.io')(); 
app.io.on('connection', function(socket){ 
// do whatever you want 
}); 

const userRoute = require('./routes/index')(app.io); 
app.use('/', userRoute); 
app.use('/users', users); 

// 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; 

エラー更新後アシシュ

PATHC:\Users\ADSS\Desktop\PrintAdmin\public 

Cによって与えられたコードはwww.js。 ¥Users¥ADSS¥D​​esktop¥PrintAdmin¥node_modules¥express¥lib¥router¥index.js:635 fn.applyを返します(this、arguments); ^

TypeError: Cannot read property 'apply' of undefined 
at 

C:\ Users \ユーザーADSS \デスクトップ\ PrintAdmin \ node_modules \表現\ libに\ルーター\ index.js:635:14 次の(Cで:\ユーザーは\ ADSS \デスクトップ\ PrintAdmin \ (C:¥Users¥ADSS¥D​​esktop¥PrintAdmin¥node_modules¥express¥lib¥router¥index.js:174:3) (C:¥Users¥ADSS¥D​​esktop¥PrintAdmin¥node_modules¥express¥lib¥router¥index.js:47:12) atオブジェクト。 (Module.js:570:32) の をObject.Module._extensions..js(module.js:579)で にコピーします(C:¥Users¥ADSS¥D​​esktop¥PrintAdmin¥app.js:46:44)。 :10) Module.load(module.jsにおいて:487:32)tryModuleLoad(module.jsで :446:12) Function.Module._load(module.jsにおいて:438:3) Module.requireで(module.js:497:17) at require(internal/module.js:20:19) atオブジェクト。 (Module.js:570:32) の (Object.Module._extensions..js)の (モジュール:C:¥Users¥ADSS¥D​​esktop¥PrintAdmin¥bin¥www:7:11) :10) at Module.load(module.js:487:32)

+0

heii user.jsの仲間..私はapp.jsでサーバーを作成していないんだ。それはwww.jsにある。 – AnonymousObject

答えて

5

module.exports = function(io) { 

    io.on('connection', function(client) { 
    console.log('Client connected...'); 
    client.on('join', function(data) { 
     console.log(data); 
    }); 
    }); 
} 

私はあなたがapp.jsとビン/ WWWのファイルを作成し速達発電機を使用してアプリケーションを生成していると思い、循環依存の問題は、IOオブジェクトを使用することがあります内部ルート。ここで何ができるかだ、

インサイドはapp.jsビン/ WWWインサイド

app.io = require('socket.io')(); // initialize io, attach server in www 
// use socket events here 
app.io.on('connection', function(socket){ 
    // do whatever you want 
}) 

// you can pass app.io inside the router and emit messages inside route. 
const userRoute = require('./routes/user')(app.io); 
app.use('/users', userRoute); 

var io = app.io; 
var server = http.createServer(app); 
io.attach(server); 

今ここにルータがどのように見えるかだ、無

module.exports = function(io){ 
    router.get('/', function(req, res, next){ 
     io.emit("message", "your message"); 
     res.send(); 
    }) 
    // edited 
    return router; 
} 
+0

これは最善の方法です。 :) –

+0

戻り値fn.apply(これ、引数); ^ TypeError:未定義のプロパティ 'apply'を読み取ることができません at .... at Object。 (C:\ Users \ ADSS \ Desktop \ PrintAdmin \ app.js:45:44)エラー! – AnonymousObject

+0

app.jsファイルを共有して、実行して参照できるようにしてください。 –

0

注:実際にはまだ試していません。

しかし、代わりにこのパターンを試すことはできますか?

www。JS index.js

var server = http.createServer(app); 
io = require('socket.io')(server); 

require('./wwww.js)(io); 
+0

var var server = http.createServer(app); io = require( 'socket.io')(サーバー); www.jsで定義されていますが、どうすればindex.jsで定義できますか? – AnonymousObject

+0

あなたはいません。 copy-pasteの形式としてrequireを考えてみましょう。 この場合、 www.js内のmodule.exportsはindex.js内に貼り付けられます –

関連する問題