2014-08-24 2 views
0

Я возиться с socketIO и в настоящее время у меня есть отдельный файл маршрута:Expressjs 4 маршрута разделения

//api.js 
var express = require('express'); 
var router = express.Router(); 

router.get('/test', function (req, res) { 
    io.sockets.emit("change", {message: "this is a test"}); //io is NOT referenced!!! 
    response.send(200); 
}); 

module.exports = router; 

где io ссылается в моей server.js как так

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

Перед использованием socketIO I включал файл маршрутов api и префикс всех маршрутов с /api следующим образом:

var api = require('./server/routes/api'); 
app.use('/api', api); 

Вопрос: Как передать ссылку на socketIO io в файл маршрутов?

+0

Существует несколько способов, включая экспорт функции init, которая принимает параметр, экспортирует * просто * функцию, которая принимает параметр, и т. Д. –

+0

Поймите Например, если вы получите время Дейва. Я думал об экспорте функции, но тогда я не знал, как я могу применить префикс '/ api' – tommyd456

ответ

0

Префикс api не имеет отношения.

(Очень) Ориентировочно это будет выглядеть примерно так:

api.js

var router = require('express').Router(); 

module.exports = function(io) { 
    router.get('/test', function (req, res) { 
    io.sockets.emit("change", {message: "this is a test"}); 
    response.send(200); 
    }); 

    return router; 
}; 

server.js фрагмент

var api = require('./server/routes/api')(io); 
app.use('/api', api); 

Вам не нужно выставлять только эту функцию на уровне модуля, например, вы можете открыть init функции, как обычный модуль предоставляет функции:

api.js

exports.init = function (io) { 
    router.get('/test', function (req, res) { 
    io.sockets.emit("change", {message: "this is a test"}); 
    response.send(200); 
    }); 

    return router; 
}; 

фрагмент server.js

var api = require('./server/routes/api'); 
app.use('/api', api.init(io)); 

Я от всего, что я могу проверить с, но объяснение ореховой скобки заключается в том, что вы хотите выставить функцию, которая принимает переменную io. Внутри этой функции io - это то, что вы прошли.

1

Существует несколько способов сделать это. Вы можете передать свой экземпляр прямо на маршрутах как так:

Или вы могли бы поставить Socket.io экземпляр в отдельном файле, который вы require() в любых файлах, которые нуждаются в Socket.io экземпляр.

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